blob: cca6be15f9b1cab35530db17890d233c7e1bf1e0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.core.product;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.pde.internal.core.iproduct.ILauncherInfo;
import org.eclipse.pde.internal.core.iproduct.IProductModel;
import org.w3c.dom.*;
public class LauncherInfo extends ProductObject implements ILauncherInfo {
private static final long serialVersionUID = 1L;
private boolean fUseIcoFile;
private Map fIcons = new HashMap();
private String fLauncherName;
public LauncherInfo(IProductModel model) {
super(model);
}
public String getLauncherName() {
return fLauncherName;
}
public void setLauncherName(String name) {
String old = fLauncherName;
fLauncherName = name;
if (isEditable())
firePropertyChanged(P_LAUNCHER, old, fLauncherName);
}
public void setIconPath(String iconId, String path) {
if (path == null)
path = ""; //$NON-NLS-1$
String old = (String) fIcons.get(iconId);
fIcons.put(iconId, path);
if (isEditable())
firePropertyChanged(iconId, old, path);
}
public String getIconPath(String iconId) {
return (String) fIcons.get(iconId);
}
public boolean usesWinIcoFile() {
return fUseIcoFile;
}
public void setUseWinIcoFile(boolean use) {
boolean old = fUseIcoFile;
fUseIcoFile = use;
if (isEditable())
firePropertyChanged(P_USE_ICO, Boolean.toString(old), Boolean.toString(fUseIcoFile));
}
public void parse(Node node) {
if (node.getNodeType() == Node.ELEMENT_NODE) {
fLauncherName = ((Element) node).getAttribute("name"); //$NON-NLS-1$
NodeList children = node.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if (child.getNodeType() == Node.ELEMENT_NODE) {
String name = child.getNodeName();
if (name.equals("linux")) { //$NON-NLS-1$
parseLinux((Element) child);
} else if (name.equals("macosx")) { //$NON-NLS-1$
parseMac((Element) child);
} else if (name.equals("solaris")) { //$NON-NLS-1$
parseSolaris((Element) child);
} else if (name.equals("win")) { //$NON-NLS-1$
parseWin((Element) child);
}
}
}
}
}
private void parseWin(Element element) {
fUseIcoFile = "true".equals(element.getAttribute(P_USE_ICO)); //$NON-NLS-1$
NodeList children = element.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
if (children.item(i).getNodeType() == Node.ELEMENT_NODE) {
Element child = (Element) children.item(i);
String name = child.getNodeName();
if (name.equals("ico")) { //$NON-NLS-1$
fIcons.put(P_ICO_PATH, child.getAttribute("path")); //$NON-NLS-1$
} else if (name.equals("bmp")) { //$NON-NLS-1$
fIcons.put(WIN32_16_HIGH, child.getAttribute(WIN32_16_HIGH));
fIcons.put(WIN32_16_LOW, child.getAttribute(WIN32_16_LOW));
fIcons.put(WIN32_32_HIGH, child.getAttribute(WIN32_32_HIGH));
fIcons.put(WIN32_32_LOW, child.getAttribute(WIN32_32_LOW));
fIcons.put(WIN32_48_HIGH, child.getAttribute(WIN32_48_HIGH));
fIcons.put(WIN32_48_LOW, child.getAttribute(WIN32_48_LOW));
fIcons.put(WIN32_256_HIGH, child.getAttribute(WIN32_256_HIGH));
}
}
}
}
private void parseSolaris(Element element) {
fIcons.put(SOLARIS_LARGE, element.getAttribute(SOLARIS_LARGE));
fIcons.put(SOLARIS_MEDIUM, element.getAttribute(SOLARIS_MEDIUM));
fIcons.put(SOLARIS_SMALL, element.getAttribute(SOLARIS_SMALL));
fIcons.put(SOLARIS_TINY, element.getAttribute(SOLARIS_TINY));
}
private void parseMac(Element element) {
fIcons.put(MACOSX_ICON, element.getAttribute("icon")); //$NON-NLS-1$
}
private void parseLinux(Element element) {
fIcons.put(LINUX_ICON, element.getAttribute("icon")); //$NON-NLS-1$
}
public void write(String indent, PrintWriter writer) {
writer.print(indent + "<launcher"); //$NON-NLS-1$
if (fLauncherName != null && fLauncherName.length() > 0)
writer.print(" name=\"" + fLauncherName + "\""); //$NON-NLS-1$ //$NON-NLS-2$
writer.println(">"); //$NON-NLS-1$
writeLinux(indent + " ", writer); //$NON-NLS-1$
writeMac(indent + " ", writer); //$NON-NLS-1$
writeSolaris(indent + " ", writer); //$NON-NLS-1$
writerWin(indent + " ", writer); //$NON-NLS-1$
writer.println(indent + "</launcher>"); //$NON-NLS-1$
}
private void writerWin(String indent, PrintWriter writer) {
writer.println(indent + "<win " + P_USE_ICO + "=\"" + Boolean.toString(fUseIcoFile) + "\">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
String path = (String) fIcons.get(P_ICO_PATH);
if (path != null && path.length() > 0)
writer.println(indent + " <ico path=\"" + getWritableString(path) + "\"/>"); //$NON-NLS-1$ //$NON-NLS-2$
writer.print(indent + " <bmp"); //$NON-NLS-1$
writeIcon(indent + " ", WIN32_16_HIGH, writer); //$NON-NLS-1$
writeIcon(indent + " ", WIN32_16_LOW, writer); //$NON-NLS-1$
writeIcon(indent + " ", WIN32_32_HIGH, writer); //$NON-NLS-1$
writeIcon(indent + " ", WIN32_32_LOW, writer); //$NON-NLS-1$
writeIcon(indent + " ", WIN32_48_HIGH, writer); //$NON-NLS-1$
writeIcon(indent + " ", WIN32_48_LOW, writer); //$NON-NLS-1$
writeIcon(indent + " ", WIN32_256_HIGH, writer); //$NON-NLS-1$
writer.println("/>"); //$NON-NLS-1$
writer.println(indent + "</win>"); //$NON-NLS-1$
}
private void writeSolaris(String indent, PrintWriter writer) {
writer.print(indent + "<solaris"); //$NON-NLS-1$
writeIcon(indent + " ", SOLARIS_LARGE, writer); //$NON-NLS-1$
writeIcon(indent + " ", SOLARIS_MEDIUM, writer); //$NON-NLS-1$
writeIcon(indent + " ", SOLARIS_SMALL, writer); //$NON-NLS-1$
writeIcon(indent + " ", SOLARIS_TINY, writer); //$NON-NLS-1$
writer.println("/>"); //$NON-NLS-1$
}
private void writeIcon(String indent, String iconId, PrintWriter writer) {
String icon = (String) fIcons.get(iconId);
if (icon != null && icon.length() > 0) {
writer.println();
writer.print(indent + " " + iconId + "=\"" + getWritableString(icon) + "\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
}
private void writeMac(String indent, PrintWriter writer) {
String icon = (String) fIcons.get(MACOSX_ICON);
if (icon != null && icon.length() > 0)
writer.println(indent + "<macosx icon=\"" + getWritableString(icon) + "\"/>"); //$NON-NLS-1$ //$NON-NLS-2$
}
private void writeLinux(String indent, PrintWriter writer) {
String icon = (String) fIcons.get(LINUX_ICON);
if (icon != null && icon.length() > 0)
writer.println(indent + "<linux icon=\"" + getWritableString(icon) + "\"/>"); //$NON-NLS-1$ //$NON-NLS-2$
}
}