/* GanttProject is an opensource project management tool. Copyright (C) 2003-2011 Alexandre Thomas, GanttProject team This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package net.sourceforge.ganttproject; import java.awt.Color; import java.awt.Font; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.security.AccessControlException; import java.util.HashMap; import java.util.Map; import javax.swing.JToolBar; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.stream.StreamResult; import net.sourceforge.ganttproject.document.DocumentManager; import net.sourceforge.ganttproject.gui.UIConfiguration; import net.sourceforge.ganttproject.gui.options.model.GP1XOptionConverter; import net.sourceforge.ganttproject.io.CSVOptions; import net.sourceforge.ganttproject.io.GanttXMLOpen; import net.sourceforge.ganttproject.io.OptionSaver; import net.sourceforge.ganttproject.io.SaverBase; import net.sourceforge.ganttproject.parser.RoleTagHandler; import net.sourceforge.ganttproject.roles.Role; import net.sourceforge.ganttproject.roles.RoleManager; import net.sourceforge.ganttproject.roles.RoleSet; import net.sourceforge.ganttproject.util.ColorConvertion; import org.osgi.service.prefs.BackingStoreException; import org.osgi.service.prefs.Preferences; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.AttributesImpl; import org.xml.sax.helpers.DefaultHandler; import biz.ganttproject.core.model.task.TaskDefaultColumn; import biz.ganttproject.core.option.BooleanOption; import biz.ganttproject.core.option.GPOption; import biz.ganttproject.core.option.GPOptionGroup; import biz.ganttproject.core.option.ListOption; import com.google.common.collect.Maps; import com.google.common.io.ByteStreams; import com.google.common.xml.XmlEscapers; /** * This class is able to load and save options on the file */ public class GanttOptions extends SaverBase { private int x = 0, y = 0, width = 800, height = 600; private boolean isloaded; private boolean automatic; private boolean redline; private int lockDAVMinutes; private int undoNumber; private String xslDir; private String xslFo; private String workingDir = ""; private final RoleManager myRoleManager; private UIConfiguration myUIConfig; private int toolBarPosition; private boolean bShowStatusBar; private String iconSize; public static final int ICONS = 0; public static final int ICONS_TEXT = 1; public static final int TEXT = 2; private int buttonsshow; /** FTP options */ private String FTPUrl = ""; private String FTPDirectory = ""; private String FTPUser = ""; private String FTPPwd = ""; /** Export options. */ private boolean bExportName; private boolean bExportComplete; private boolean bExportRelations; private boolean bExport3DBorders; /** CSV export options. */ private CSVOptions csvOptions; private Map<String, GPOption<?>> myGPOptions = Maps.newLinkedHashMap(); private Map<String, GP1XOptionConverter> myTagDotAttribute_Converter = new HashMap<String, GP1XOptionConverter>(); private final DocumentManager myDocumentManager; private final PluginPreferencesImpl myPluginPreferencesRootNode; private String myVersion; public GanttOptions(RoleManager roleManager, DocumentManager documentManager, boolean isOnlyViewer) { myDocumentManager = documentManager; myRoleManager = roleManager; myPluginPreferencesRootNode = new PluginPreferencesImpl(null, ""); initDefault(); try { this.workingDir = System.getProperty("user.home"); } catch (AccessControlException e) { // This can happen when running in a sandbox (Java WebStart) System.err.println(e + ": " + e.getMessage()); } } public Preferences getPluginPreferences() { return myPluginPreferencesRootNode; } /** Initialize the options with default values. */ public void initDefault() { automatic = false; redline = false; lockDAVMinutes = 240; undoNumber = 50; xslDir = String.valueOf(GanttOptions.class.getResource("/xslt")); xslFo = String.valueOf(GanttOptions.class.getResource("/xslfo/ganttproject.xsl")); toolBarPosition = JToolBar.HORIZONTAL; bShowStatusBar = true; // must be 16 small, 24 for big (32 for extra big not directly include on // UI) iconSize = "16"; buttonsshow = GanttOptions.ICONS; // Export options bExportName = true; bExportComplete = true; bExportRelations = true; bExport3DBorders = false; // CSV export options csvOptions = new CSVOptions(); } public static File getOptionsFile() { return new File(System.getProperty("user.home") + System.getProperty("file.separator") + ".ganttproject"); } /** * Save the options file */ public void save() { try { File file = getOptionsFile(); ByteArrayOutputStream outBuffer = new ByteArrayOutputStream(); doSave(outBuffer); BufferedOutputStream outFile = new BufferedOutputStream(new FileOutputStream(file)); ByteStreams.copy(new ByteArrayInputStream(outBuffer.toByteArray()), outFile); outFile.flush(); outFile.close(); } catch (Throwable e) { GPLogger.log(e); } } private void doSave(OutputStream out) throws Exception { final TransformerHandler handler = ((SAXTransformerFactory) SAXTransformerFactory.newInstance()).newTransformerHandler(); Transformer serializer = handler.getTransformer(); serializer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); serializer.setOutputProperty(OutputKeys.INDENT, "yes"); serializer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); handler.setResult(new StreamResult(out)); handler.startDocument(); // handler.startDTD("ganttproject.sourceforge.net", // "-//GanttProject.org//DTD GanttProject-1.x//EN", // "http://ganttproject.sourceforge.net/dtd/ganttproject.dtd"); // handler.endDTD(); final AttributesImpl attrs = new AttributesImpl(); addAttribute("version", GPVersion.getCurrentVersionNumber(), attrs); handler.startElement("", "ganttproject-options", "ganttproject-options", attrs); attrs.clear(); // write the task Color // Color color = getUIConfiguration().getTaskColor(); // attrs.addAttribute("", "red", "red", "CDATA", "" + color.getRed()); // attrs.addAttribute("", "green", "green", "CDATA", "" // + color.getGreen()); // attrs.addAttribute("", "blue", "blue", "CDATA", "" // + color.getBlue()); // handler.startElement("", "task-color", "task-color", attrs); // handler.endElement("", "task-color", "task-color"); attrs.clear(); Color resourceColor = myUIConfig.getResourceColor(); if (resourceColor != null) { attrs.addAttribute("", "resources", "resources", "CDATA", ColorConvertion.getColor(resourceColor)); } Color resourceOverloadColor = myUIConfig.getResourceOverloadColor(); if (resourceOverloadColor != null) { attrs.addAttribute("", "resourcesOverload", "resourcesOverload", "CDATA", ColorConvertion.getColor(resourceOverloadColor)); } Color resourceUnderloadColor = myUIConfig.getResourceUnderloadColor(); if (resourceUnderloadColor != null) { attrs.addAttribute("", "resourcesUnderload", "resourcesUnderload", "CDATA", ColorConvertion.getColor(resourceUnderloadColor)); } Color weekEndColor = myUIConfig.getWeekEndColor(); if (weekEndColor != null) { attrs.addAttribute("", "weekEnd", "weekEnd", "CDATA", ColorConvertion.getColor(weekEndColor)); } Color daysOffColor = myUIConfig.getDayOffColor(); if (daysOffColor != null) { attrs.addAttribute("", "daysOff", "daysOff", "CDATA", ColorConvertion.getColor(daysOffColor)); } handler.startElement("", "colors", "colors", attrs); handler.endElement("", "colors", "colors"); attrs.clear(); // Geometry of the window addAttribute("x", "" + x, attrs); addAttribute("y", "" + y, attrs); addAttribute("width", "" + width, attrs); addAttribute("height", "" + height, attrs); emptyElement("geometry", attrs, handler); // ToolBar position addAttribute("position", "" + toolBarPosition, attrs); addAttribute("icon-size", "" + iconSize, attrs); addAttribute("show", "" + buttonsshow, attrs); emptyElement("toolBar", attrs, handler); addAttribute("show", "" + bShowStatusBar, attrs); emptyElement("statusBar", attrs, handler); // Export options addAttribute("name", "" + bExportName, attrs); addAttribute("complete", "" + bExportComplete, attrs); addAttribute("border3d", "" + bExport3DBorders, attrs); addAttribute("relations", "" + bExportRelations, attrs); emptyElement("export", attrs, handler); // csv export options startElement("csv-export", attrs, handler); addAttribute("fixed", "" + csvOptions.bFixedSize, attrs); addAttribute("separatedChar", "" + csvOptions.sSeparatedChar, attrs); addAttribute("separatedTextChar", "" + csvOptions.sSeparatedTextChar, attrs); emptyElement("csv-general", attrs, handler); endElement("csv-export", handler); addAttribute("id", "csv-export", attrs); startElement("view", attrs, handler); for (Map.Entry<String, BooleanOption> entry: csvOptions.getTaskOptions().entrySet()) { if (entry.getValue().isChecked()) { addAttribute("id", XmlEscapers.xmlAttributeEscaper().escape(entry.getKey()), attrs); emptyElement("field", attrs, handler); } } startElement("resources", attrs, handler); for (Map.Entry<String, BooleanOption> entry: csvOptions.getResourceOptions().entrySet()) { if (entry.getValue().isChecked()) { addAttribute("id", XmlEscapers.xmlAttributeEscaper().escape(entry.getKey()), attrs); emptyElement("field", attrs, handler); } } endElement("resources", handler); endElement("view", handler); // automatic popup launch addAttribute("value", "" + automatic, attrs); emptyElement("automatic-launch", attrs, handler); // automatic tips of the day launch // Should WebDAV resources be locked, when opening them? addAttribute("value", "" + lockDAVMinutes, attrs); emptyElement("lockdavminutes", attrs, handler); // write the xsl directory addAttribute("dir", xslDir, attrs); emptyElement("xsl-dir", attrs, handler); // write the xslfo directory addAttribute("file", xslFo, attrs); emptyElement("xsl-fo", attrs, handler); // write the working directory directory addAttribute("dir", workingDir, attrs); emptyElement("working-dir", attrs, handler); // The last opened files { startElement("files", attrs, handler); for (String recent : myDocumentManager.getRecentDocuments()) { addAttribute("path", recent, attrs); emptyElement("file", attrs, handler); } endElement("files", handler); } //addAttribute("category", "chart-main", attrs); //addAttribute("spec", getFontSpec(getUIConfiguration().getChartMainFont()), attrs); //emptyElement("font", attrs, handler); saveRoleSets(handler); new OptionSaver().saveOptionMap(myGPOptions.entrySet(), handler); savePreferences(myPluginPreferencesRootNode.node("/configuration"), handler); savePreferences(myPluginPreferencesRootNode.node("/instance"), handler); endElement("ganttproject-options", handler); GPLogger.log("[GanttOptions] save(): finished!!"); handler.endDocument(); } private void savePreferences(Preferences node, TransformerHandler handler) throws BackingStoreException, SAXException { AttributesImpl attrs = new AttributesImpl(); startElement(node.name(), attrs, handler); String[] keys = node.keys(); for (int i = 0; i < keys.length; i++) { addAttribute("name", keys[i], attrs); addAttribute("value", node.get(keys[i], ""), attrs); emptyElement("option", attrs, handler); } String[] children = node.childrenNames(); for (int i = 0; i < children.length; i++) { savePreferences(node.node(children[i]), handler); } endElement(node.name(), handler); } private String getFontSpec(Font font) { return font.getFamily() + "-" + getFontStyle(font) + "-" + font.getSize(); } private String getFontStyle(Font font) { String result; final int BOLDITALIC = Font.BOLD + Font.ITALIC; switch (font.getStyle()) { case Font.PLAIN: { result = "plain"; break; } case Font.BOLD: { result = "bold"; break; } case Font.ITALIC: { result = "italic"; break; } case BOLDITALIC: { result = "bolditalic"; break; } default: { throw new RuntimeException("Illegal value of font style. style=" + font.getStyle() + " font=" + font); } } return result; } public String correct(String s) { String res; res = s.replaceAll("&", "&"); res = res.replaceAll("<", "<"); res = res.replaceAll(">", ">"); res = res.replaceAll("/", "/"); res = res.replaceAll("\"", """); return res; } /** Load the options file */ public boolean load() { // Use an instance of ourselves as the SAX event handler DefaultHandler handler = new GanttXMLOptionsParser(); // Use the default (non-validating) parser SAXParserFactory factory = SAXParserFactory.newInstance(); try { String sFileName = ".ganttproject"; /* * if(System.getProperty("os.name").startsWith("Windows") || * System.getProperty("os.name").startsWith("Mac")) sFileName = * "ganttproject.ini"; */ File file = new File(System.getProperty("user.home") + System.getProperty("file.separator") + sFileName); if (!file.exists()) { return false; } myDocumentManager.clearRecentDocuments(); // Parse the input SAXParser saxParser = factory.newSAXParser(); saxParser.parse(file, handler); loadRoleSets(file); } catch (Exception e) { if (!GPLogger.log(e)) { e.printStackTrace(System.err); } return false; } isloaded = true; return true; } private void loadRoleSets(File optionsFile) { GanttXMLOpen loader = new GanttXMLOpen(null); loader.addTagHandler(new RoleTagHandler(getRoleManager())); loader.load(optionsFile); } private void saveRoleSets(TransformerHandler handler) throws TransformerFactoryConfigurationError, SAXException { RoleSet[] roleSets = getRoleManager().getRoleSets(); for (int i = 0; i < roleSets.length; i++) { AttributesImpl attrs = new AttributesImpl(); attrs.addAttribute("", "roleset-name", "roleset-name", "CDATA", roleSets[i].getName()); handler.startElement("", "roles", "roles", attrs); saveRoles(roleSets[i], handler); handler.endElement("", "roles", "roles"); } } private void saveRoles(RoleSet roleSet, TransformerHandler handler) throws SAXException { Role[] roles = roleSet.getRoles(); AttributesImpl attrs = new AttributesImpl(); for (int i = 0; i < roles.length; i++) { Role next = roles[i]; addAttribute("id", "" + next.getID(), attrs); addAttribute("name", next.getName(), attrs); emptyElement("role", attrs, handler); } } public UIConfiguration getUIConfiguration() { if (myUIConfig == null) { myUIConfig = new UIConfiguration(new Color(140, 182, 206), redline); } return myUIConfig; } private RoleManager getRoleManager() { return myRoleManager; } /** Class to parse the xml option file */ class GanttXMLOptionsParser extends DefaultHandler { private PluginOptionsHandler myPluginOptionsHandler; private ListOption myContextOption; private StringBuilder myCdataBuffer = new StringBuilder(); private Map<String, BooleanOption> myContextViewOptions = null; @Override public void startElement(String namespaceURI, String sName, // simple name String qName, // qualified name Attributes attrs) throws SAXException { if ("ganttproject-options".equals(qName)) { myVersion = attrs.getValue("version"); return; } if ("configuration".equals(qName) || "instance".equals(qName)) { myPluginOptionsHandler = new PluginOptionsHandler(myPluginPreferencesRootNode); } if (myPluginOptionsHandler != null) { myPluginOptionsHandler.startElement(namespaceURI, sName, qName, attrs); return; } int r = 0, g = 0, b = 0; if ("option".equals(qName)) { GPOption option = myGPOptions.get(attrs.getValue("id")); if (option instanceof ListOption) { myContextOption = (ListOption)option; } else { if (option != null) { option.loadPersistentValue(attrs.getValue("value")); } } return; } if ("view".equals(qName)) { String viewId = attrs.getValue("id"); if ("csv-export".equals(viewId)) { myContextViewOptions = csvOptions.getTaskOptions(); for (BooleanOption o : myContextViewOptions.values()) { o.setValue(false); } } } if ("resources".equals(qName) && myContextViewOptions != null) { myContextViewOptions = csvOptions.getResourceOptions(); for (BooleanOption o : myContextViewOptions.values()) { o.setValue(false); } } if ("field".equals(qName) && myContextViewOptions != null) { BooleanOption option = myContextViewOptions.get(attrs.getValue("id")); if (option != null) { option.setValue(true); } } if (attrs != null) { for (int i = 0; i < attrs.getLength(); i++) { /** Attribute name */ String aName = attrs.getQName(i); /** Value of attribute */ String value = attrs.getValue(i); String tagDotAttribute = qName + "." + aName; GP1XOptionConverter converter = myTagDotAttribute_Converter.get(tagDotAttribute); if (converter != null) { converter.loadValue(value); continue; } if (qName.equals("task-color")) { if (aName.equals("red")) { r = new Integer(value).hashCode(); } else if (aName.equals("green")) { g = new Integer(value).hashCode(); } else if (aName.equals("blue")) { b = new Integer(value).hashCode(); } } else if (qName.equals("geometry")) { if (aName.equals("x")) { x = new Integer(value).hashCode(); } else if (aName.equals("y")) { y = new Integer(value).hashCode(); } else if (aName.equals("width")) { width = new Integer(value).hashCode(); } else if (aName.equals("height")) { height = new Integer(value).hashCode(); } } else if (qName.equals("file")) { if (aName.equals("path")) { myDocumentManager.addToRecentDocuments(value); } } else if (qName.equals("automatic-launch")) { if (aName.equals("value")) { automatic = (new Boolean(value)).booleanValue(); } } else if (qName.equals("lockdavminutes")) { if (aName.equals("value")) { lockDAVMinutes = (new Integer(value)).intValue(); } } else if (qName.equals("xsl-dir")) { if (aName.equals("dir")) { if (new File(value).exists()) xslDir = value; } } else if (qName.equals("xsl-fo")) { if (aName.equals("file")) { if (new File(value).exists()) xslFo = value; } } else if (qName.equals("working-dir")) { if (aName.equals("dir")) { if (new File(value).exists()) workingDir = value; } } else if (qName.equals("toolBar")) { if (aName.equals("position")) toolBarPosition = (new Integer(value)).intValue(); else if (aName.equals("icon-size")) iconSize = value; else if (aName.equals("show")) buttonsshow = (new Integer(value)).intValue(); } else if (qName.equals("statusBar")) { if (aName.equals("show")) bShowStatusBar = (new Boolean(value)).booleanValue(); } else if (qName.equals("export")) { if (aName.equals("name")) { bExportName = (new Boolean(value)).booleanValue(); } else if (aName.equals("complete")) { bExportComplete = (new Boolean(value)).booleanValue(); } else if (aName.equals("relations")) { bExportRelations = (new Boolean(value)).booleanValue(); } else if (aName.equals("border3d")) { bExport3DBorders = (new Boolean(value)).booleanValue(); } } else if (qName.equals("colors")) { if (aName.equals("resources")) { Color colorR = ColorConvertion.determineColor(value); if (colorR != null) setResourceColor(colorR); } else if (aName.equals("resourcesOverload")) { Color colorR = ColorConvertion.determineColor(value); if (colorR != null) setResourceOverloadColor(colorR); } else if (aName.equals("resourcesUnderload")) { Color colorR = ColorConvertion.determineColor(value); if (colorR != null) setResourceUnderloadColor(colorR); } else if (aName.equals("weekEnd")) { Color colorR = ColorConvertion.determineColor(value); if (colorR != null) setWeekEndColor(colorR); } else if (aName.equals("daysOff")) { Color colorD = ColorConvertion.determineColor(value); if (colorD != null) setDaysOffColor(colorD); } } else if (qName.equals("csv-general")) { if (aName.equals("fixed")) csvOptions.bFixedSize = (new Boolean(value)).booleanValue(); if (aName.equals("separatedChar")) csvOptions.sSeparatedChar = value; if (aName.equals("separatedTextChar")) csvOptions.sSeparatedTextChar = value; } else if (qName.equals("csv-tasks")) { if (aName.equals("id")) { csvOptions.getTaskOptions().get(TaskDefaultColumn.ID.getStub().getID()).setValue(Boolean.valueOf(value)); } else if (aName.equals("name")) { csvOptions.getTaskOptions().get(TaskDefaultColumn.NAME.getStub().getID()).setValue(Boolean.valueOf(value)); } else if (aName.equals("start-date")) { csvOptions.getTaskOptions().get(TaskDefaultColumn.BEGIN_DATE.getStub().getID()).setValue(Boolean.valueOf(value)); } else if (aName.equals("end-date")) { csvOptions.getTaskOptions().get(TaskDefaultColumn.END_DATE.getStub().getID()).setValue(Boolean.valueOf(value)); } else if (aName.equals("percent")) { csvOptions.getTaskOptions().get(TaskDefaultColumn.COMPLETION.getStub().getID()).setValue(Boolean.valueOf(value)); } else if (aName.equals("duration")) { csvOptions.getTaskOptions().get(TaskDefaultColumn.DURATION.getStub().getID()).setValue(Boolean.valueOf(value)); } else if (aName.equals("webLink")) { csvOptions.getTaskOptions().get("webLink").setValue(Boolean.valueOf(value)); } else if (aName.equals("resources")) { csvOptions.getTaskOptions().get("resources").setValue(Boolean.valueOf(value)); } else if (aName.equals("notes")) { csvOptions.getTaskOptions().get("notes").setValue(Boolean.valueOf(value)); } } else if (qName.equals("csv-resources")) { Boolean bValue = Boolean.valueOf(value); switch (aName) { case "id": csvOptions.getResourceOptions().get("id").setValue(bValue); break; case "name": csvOptions.getResourceOptions().get(ResourceDefaultColumn.NAME.getStub().getID()).setValue(bValue); break; case "mail": csvOptions.getResourceOptions().get(ResourceDefaultColumn.EMAIL.getStub().getID()).setValue(bValue); break; case "phone": csvOptions.getResourceOptions().get(ResourceDefaultColumn.PHONE.getStub().getID()).setValue(bValue); break; case "role": csvOptions.getResourceOptions().get(ResourceDefaultColumn.ROLE.getStub().getID()).setValue(bValue); break; } } } } } @Override public void endElement(String uri, String localName, String name) throws SAXException { if (myPluginOptionsHandler != null) { myPluginOptionsHandler.endElement(uri, localName, name); } if ("configuration".equals(name) || "instance".equals(name)) { myPluginOptionsHandler = null; } if (myContextOption != null) { myContextOption.loadPersistentValue(myCdataBuffer.toString()); myContextOption = null; myCdataBuffer = new StringBuilder(); } if ("view".equals(name)) { myContextViewOptions = null; } } @Override public void characters(char[] ch, int start, int length) throws SAXException { if (myContextOption != null) { myCdataBuffer.append(ch, start, length); } } } /** @return the color for resources. */ public Color getResourceColor() { return getUIConfiguration().getResourceColor(); } /** @return the lock DAV Minutes. */ public int getLockDAVMinutes() { return lockDAVMinutes; } /** @return the undo number */ public int getUndoNumber() { return undoNumber; } /** @return the working directory. */ public String getWorkingDir() { return workingDir; } /** @return the xsl directory. */ public String getXslDir() { return xslDir; } /** @return the xsl-fo file. */ public String getXslFo() { return (new File(xslFo).exists()) ? xslFo : getClass().getResource("/xslfo/ganttproject.xsl").toString(); } /** @return automatic launch properties box when create a new task. */ public boolean getAutomatic() { return automatic; } /** @return true is options are loaded from the options file. */ public boolean isLoaded() { return isloaded; } /** @return true if show the status bar. */ public boolean getShowStatusBar() { return bShowStatusBar; } /** set show the status bar. */ public void setShowStatusBar(boolean showStatusBar) { bShowStatusBar = showStatusBar; } /** @return the top left x position of the window. */ public int getX() { return x; } /** @return the top left y position of the window. */ public int getY() { return y; } /** @return the width of the window. */ public int getWidth() { return width; } /** @return the height of the window. */ public int getHeight() { return height; } /** @return the csvOptions. */ public CSVOptions getCSVOptions() { return csvOptions; } /** @return the toolbar position. */ public int getToolBarPosition() { return toolBarPosition; } /** @return the size of the icons on the toolbar. */ public String getIconSize() { return iconSize; } /** * @return true if you want to export the name of the task on the exported * chart. */ public boolean getExportName() { return bExportName; } /** * @return true if you want to export the complete percent of the task on the * exported chart. */ public boolean getExportComplete() { return bExportComplete; } /** * @return true if you want to export the relations of the task on the * exported chart. */ public boolean getExportRelations() { return bExportRelations; } /** @return the 3d borders export. */ public boolean getExport3dBorders() { return bExport3DBorders; } public GanttExportSettings getExportSettings() { return new GanttExportSettings(bExportName, bExportComplete, bExportRelations, bExport3DBorders); } public void setExportName(boolean exportName) { bExportName = exportName; } public void setExportComplete(boolean exportComplete) { bExportComplete = exportComplete; } public void setExportRelations(boolean eportRelations) { bExportRelations = eportRelations; } public void setExport3dBorders(boolean borders3d) { bExport3DBorders = borders3d; } /** * @return the button show attribute must be GanttOptions.ICONS or * GanttOptions.TEXT ir GanttOptions.ICONS_TEXT */ public int getButtonShow() { return buttonsshow; } /** * set a new button show value must be GanttOptions.ICONS or GanttOptions.TEXT * ir GanttOptions.ICONS_TEXT */ public void setButtonShow(int buttonShow) { if (buttonShow != GanttOptions.ICONS && buttonShow != GanttOptions.TEXT && buttonShow != GanttOptions.ICONS_TEXT) buttonShow = GanttOptions.ICONS; buttonsshow = buttonShow; } /** Set a new icon size. Must be 16, 24 (or 32 exceptionnally) */ public void setIconSize(String sIconSize) { iconSize = sIconSize; } /** set the toolbar position. */ public void setToolBarPosition(int iToolBarPosition) { toolBarPosition = iToolBarPosition; } /** Set new window position (top left corner) */ public void setWindowPosition(int x, int y) { this.x = x; this.y = y; } /** Set new window position (top left corner) */ public void setWindowSize(int width, int height) { this.width = width; this.height = height; } /** Set new working directory value. */ public void setWorkingDirectory(String workingDirectory) { workingDir = workingDirectory; } /** set a new value for web dav locking. */ public void setLockDAVMinutes(int minuteslock) { lockDAVMinutes = minuteslock; } /** set a new value for undo number. */ public void setUndoNumber(int number) { undoNumber = number; } /** set a new default resources color. */ public void setResourceColor(Color color) { getUIConfiguration().setResourceColor(color); } /** set a new resources overload tasks color. */ public void setResourceOverloadColor(Color color) { getUIConfiguration().setResourceOverloadColor(color); } /** set a new resources underload tasks color. */ public void setResourceUnderloadColor(Color color) { getUIConfiguration().setResourceUnderloadColor(color); } /** set a new previous tasks color. */ public void setPreviousTaskColor(Color color) { getUIConfiguration().setPreviousTaskColor(color); } /** set a new earlier previous tasks color. */ public void setEarlierPreviousTaskColor(Color color) { getUIConfiguration().setEarlierPreviousTaskColor(color); } /** set a new later previous tasks color. */ public void setLaterPreviousTaskColor(Color color) { getUIConfiguration().setLaterPreviousTaskColor(color); } /** Set a new week end color. */ public void setWeekEndColor(Color color) { getUIConfiguration().setWeekEndColor(color); } /** Set a new week end color. */ public void setDaysOffColor(Color color) { getUIConfiguration().setDayOffColor(color); } /** Set a new xsl directory for html export. */ public void setXslDir(String xslDir) { this.xslDir = xslDir; } /** Set a new xsl-fo file for pdf export. */ public void setXslFo(String xslFo) { this.xslFo = xslFo; } public void setUIConfiguration(UIConfiguration uiConfiguration) { this.myUIConfig = uiConfiguration; } /** set new automatic launch value. */ public void setAutomatic(boolean automatic) { this.automatic = automatic; } public void setRedline(boolean isOn) { this.redline = isOn; getUIConfiguration().setRedlineOn(isOn); } public String getFTPDirectory() { return FTPDirectory; } public String getFTPPwd() { return FTPPwd; } public String getFTPUrl() { return FTPUrl; } public String getFTPUser() { return FTPUser; } public void setFTPDirectory(String pvString) { FTPDirectory = pvString; } public void setFTPPwd(String pvString) { FTPPwd = pvString; } public void setFTPUrl(String pvString) { FTPUrl = pvString; } public void setFTPUser(String pvString) { FTPUser = pvString; } public void addOptionGroups(GPOptionGroup... optionGroups) { for (GPOptionGroup group : optionGroups) { addOptions(group); } } public void addOptionGroups(Iterable<GPOptionGroup> optionGroups) { for (GPOptionGroup group : optionGroups) { addOptions(group); } } public void addOptions(GPOptionGroup optionGroup) { GPOption[] options = optionGroup.getOptions(); for (int i = 0; i < options.length; i++) { GPOption nextOption = options[i]; myGPOptions.put(optionGroup.getID() + "." + nextOption.getID(), nextOption); if (nextOption instanceof GP1XOptionConverter) { GP1XOptionConverter nextConverter = (GP1XOptionConverter) nextOption; myTagDotAttribute_Converter.put(nextConverter.getTagName() + "." + nextConverter.getAttributeName(), nextConverter); } } } public String getVersion() { return myVersion; } }