diff --git a/INSTALL b/INSTALL index da516cc69..aa0b86ef2 100644 --- a/INSTALL +++ b/INSTALL @@ -24,6 +24,17 @@ Instructions:: $ sudo apt-get update $ sudo apt-get install libreplan +.. TIP:: + + If you do not have ``add-apt-repository`` command, you will need to install + ``python-software-properties`` package before running the previous commands. + You can do it with the following line:: + + sudo apt-get install python-software-properties + +.. WARNING:: + + If you have memory problems review the section `Fix memory errors`_. Debian packages ~~~~~~~~~~~~~~~ @@ -47,9 +58,58 @@ Instructions: .. WARNING:: - If you have problems with printing support review the last section `Fix + If you have problems with printing support review the section `Fix printing in Debian Squeeze`_. +.. WARNING:: + + If you have memory problems review the section `Fix memory errors`_. + +Fedora and openSUSE OBS (openSUSE Build Service) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Instructions depending on the distribution: + +* Fedora 16:: + + # cd /etc/yum.repos.d + # wget download.opensuse.org/repositories/home:/jsuarezr:/LibrePlan/Fedora_16/home:jsuarezr:LibrePlan.repo + # yum install libreplan + +* Fedora 15:: + + # cd /etc/yum.repos.d + # wget download.opensuse.org/repositories/home:/jsuarezr:/LibrePlan/Fedora_15/home:jsuarezr:LibrePlan.repo + # yum install libreplan + +* openSUSE 12.1:: + + # cd /etc/zypp/repos.d + # wget download.opensuse.org/repositories/home:/jsuarezr:/LibrePlan/openSUSE_12.1/home:jsuarezr:LibrePlan.repo + # zypper ref + # zypper install libreplan + +* openSUSE 11.4:: + + # cd /etc/zypp/repos.d + # wget download.opensuse.org/repositories/home:/jsuarezr:/LibrePlan/openSUSE_11.4/home:jsuarezr:LibrePlan.repo + # zypper ref + # zypper install libreplan + +.. WARNING:: + + If you have memory problems review the section `Fix memory errors`_. + +RPM Packages +~~~~~~~~~~~~ + +There are several LibrePlan RPM packages available in the following URL: +http://download.opensuse.org/repositories/home:/jsuarezr:/LibrePlan/ + +.. WARNING:: + + If you have memory problems review the section `Fix memory errors`_. + LibrePlan manual installation ----------------------------- @@ -73,7 +133,7 @@ Debian/Ubuntu * Download database installation script:: - $ wget -O install.sql http://downloads.sourceforge.net/project/librelplan/LibrePlan/install_1.2.0.sql + $ wget -O install.sql http://downloads.sourceforge.net/project/libreplan/LibrePlan/install_1.2.0.sql * Create database structure:: @@ -273,3 +333,47 @@ Instructions: * Fetch and install ``cutycapt`` (and its dependencies) from testing:: # apt-get -t testing install cutycapt + + +Fix memory errors +----------------- + +With the default parameters of Tomcat in the different distributions you could +have problems with Java memory. + +After a while using LibrePlan you could see that some windows do not work and +the log shows a ``java.lang.OutOfMemoryError`` exception. + +This exception could be caused because of two different issues: + +* Heap space:: + + java.lang.OutOfMemoryError: Java heap space + +* PermGemp space (Permanent Generation, reflective data for the JVM):: + + java.lang.OutOfMemoryError: PermGen space + +In order to avoid this problem you need to configure properly ``JAVA_OPTS`` +variable in your server. This is configured in different files depending on the +distribution: + +* Debian or Ubuntu: ``/etc/default/tomcat6`` +* Fedora or openSUSE: ``/etc/tomcat6/tomcat6.conf`` + +The next lines show a possible configuration to fix the memory errors (the exact +values depends on the server features):: + + JAVA_OPTS="-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m" + JAVA_OPTS="${JAVA_OPTS} -server -Djava.awt.headless=true" + +Where the different parameters have the following meaning: + +* ``-Xms``: Initial size of the Java heap +* ``-Xmx``: Maximum size of the Java heap +* ``-XX:PermSize``: Initial size of PermGen +* ``-XX:MaxPermSize``: Maximum size of PermGen + +.. NOTE:: + + Take into account that size of PermGen is additional to heap size. diff --git a/README.Fedora b/README.Fedora index d63abec06..7d6089137 100644 --- a/README.Fedora +++ b/README.Fedora @@ -56,6 +56,8 @@ authentication method", at the end of this document. LibrePlan should be running at http://localhost:8080/libreplan +Review INSTALL file for more information. + Upgrading LibrePlan a.b.c to LibrePlan x.y.z ============================================ diff --git a/README.openSUSE b/README.openSUSE index 6cf1da88c..0fe59b4b1 100644 --- a/README.openSUSE +++ b/README.openSUSE @@ -61,6 +61,7 @@ authentication method", at the end of this document. LibrePlan should be running at http://localhost:8080/libreplan +Review INSTALL file for more information. Upgrading LibrePlan a.b.c to LibrePlan x.y.z diff --git a/doc/src/user/en/20-acerca-de.rst b/doc/src/user/en/20-acerca-de.rst index 80f5ab9fa..699cce057 100644 --- a/doc/src/user/en/20-acerca-de.rst +++ b/doc/src/user/en/20-acerca-de.rst @@ -5,12 +5,24 @@ About .. contents:: -Licence -======== +Copyright +========= Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e Desenvolvemento Tecnolóxico de Galicia +Copyright (C) 2010 Igalia, S.L.; Wireless Galicia, S.L. + +Copyright (C) 2011 Igalia, S.L.; Wireless Galicia, S.L.; ComtecSF, S.L.; +CafédeRed Solutions, S.L. + +Copyright (C) 2012 Igalia, S.L.; Wireless Galicia, S.L.; CafédeRed Solutions, +S.L. + + +Licence +======== + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or diff --git a/doc/src/user/es/20-acerca-de.rst b/doc/src/user/es/20-acerca-de.rst index 12a93ef76..6c58945ea 100644 --- a/doc/src/user/es/20-acerca-de.rst +++ b/doc/src/user/es/20-acerca-de.rst @@ -5,6 +5,21 @@ Acerca de .. contents:: +Copyright +========= + +Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e +Desenvolvemento Tecnolóxico de Galicia + +Copyright (C) 2010 Igalia, S.L.; Wireless Galicia, S.L. + +Copyright (C) 2011 Igalia, S.L.; Wireless Galicia, S.L.; ComtecSF, S.L.; +CafédeRed Solutions, S.L. + +Copyright (C) 2012 Igalia, S.L.; Wireless Galicia, S.L.; CafédeRed Solutions, +S.L. + + Licencia ================ diff --git a/doc/src/user/gl/20-acerca-de.rst b/doc/src/user/gl/20-acerca-de.rst index 1b377b26f..41951a38c 100644 --- a/doc/src/user/gl/20-acerca-de.rst +++ b/doc/src/user/gl/20-acerca-de.rst @@ -5,6 +5,21 @@ Acerca de .. contents:: +Copyright +========= + +Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e +Desenvolvemento Tecnolóxico de Galicia + +Copyright (C) 2010 Igalia, S.L.; Wireless Galicia, S.L. + +Copyright (C) 2011 Igalia, S.L.; Wireless Galicia, S.L.; ComtecSF, S.L.; +CafédeRed Solutions, S.L. + +Copyright (C) 2012 Igalia, S.L.; Wireless Galicia, S.L.; CafédeRed Solutions, +S.L. + + Licenza ================ diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/FunctionalityExposedForExtensions.java b/ganttzk/src/main/java/org/zkoss/ganttz/FunctionalityExposedForExtensions.java index 5320124d7..92c70ae7e 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/FunctionalityExposedForExtensions.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/FunctionalityExposedForExtensions.java @@ -3,7 +3,7 @@ * * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e * Desenvolvemento Tecnolóxico de Galicia - * Copyright (C) 2010-2011 Igalia, S.L. + * Copyright (C) 2010-2012 Igalia, S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -227,6 +227,7 @@ public class FunctionalityExposedForExtensions implements IContext { } result.setShowingReportedHours(planner.showReportedHoursRightNow()); + result.setShowingMoneyCostBar(planner.showMoneyCostBarRightNow()); result.setShowingAdvances(planner.showAdvancesRightNow()); mapper.register(position, result, data); @@ -465,6 +466,20 @@ public class FunctionalityExposedForExtensions implements IContext { } } + @Override + public void showMoneyCostBar() { + for (Task task : diagramGraph.getTasks()) { + task.setShowingMoneyCostBar(true); + } + } + + @Override + public void hideMoneyCostBar() { + for (Task task : diagramGraph.getTasks()) { + task.setShowingMoneyCostBar(false); + } + } + @Override public void reloadCharts() { configuration.reloadCharts(); @@ -483,6 +498,8 @@ public class FunctionalityExposedForExtensions implements IContext { Checkbox advances = (Checkbox) parent.getFellow("print_advances"); Checkbox reportedHours = (Checkbox) parent .getFellow("print_reported_hours"); + Checkbox moneyCostBar = (Checkbox) parent + .getFellow("print_money_cost_bar"); parameters.put("extension", ".png"); if (expanded.isChecked() == true) { @@ -497,6 +514,9 @@ public class FunctionalityExposedForExtensions implements IContext { if (reportedHours.isChecked() == true) { parameters.put("reportedHours", "all"); } + if (moneyCostBar.isChecked() == true) { + parameters.put("moneyCostBar", "all"); + } if (resources.isChecked() == true) { parameters.put("resources", "all"); } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/GanttPanel.java b/ganttzk/src/main/java/org/zkoss/ganttz/GanttPanel.java index c184e4f99..335dfe229 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/GanttPanel.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/GanttPanel.java @@ -141,7 +141,9 @@ public class GanttPanel extends XulElement implements AfterCompose { for (Task task : this.tasksLists.getAllTasks()) { task.updateTooltipText(); } - invalidate(); + for (TaskComponent taskComponent : this.tasksLists.getTaskComponents()) { + taskComponent.invalidate(); + } } public TimeTrackerComponent getTimeTrackerComponent() { diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java b/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java index 1d2984df6..f30a2e0a7 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/Planner.java @@ -3,7 +3,7 @@ * * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e * Desenvolvemento Tecnolóxico de Galicia - * Copyright (C) 2010-2011 Igalia, S.L. + * Copyright (C) 2010-2012 Igalia, S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -120,6 +120,15 @@ public class Planner extends HtmlMacroComponent { return toLowercaseSet(values).contains("all"); } + public static boolean guessShowMoneyCostBarByDefault( + Map queryURLParameters) { + String[] values = queryURLParameters.get("moneyCostBar"); + if (values == null) { + return false; + } + return toLowercaseSet(values).contains("all"); + } + private static Set toLowercaseSet(String[] values) { Set result = new HashSet(); for (String each : values) { @@ -156,6 +165,8 @@ public class Planner extends HtmlMacroComponent { private boolean isShowingReportedHours = false; + private boolean isShowingMoneyCostBar = false; + private boolean isShowingResources = false; private boolean isExpandAll = false; @@ -372,6 +383,11 @@ public class Planner extends HtmlMacroComponent { Button showAllResources = (Button) getFellow("showAllResources"); showAllResources.setVisible(false); } + if (!configuration.isMoneyCostBarEnabled()) { + Button showMoneyCostBarButton = (Button) getFellow("showMoneyCostBar"); + showMoneyCostBarButton.setVisible(false); + } + listZoomLevels.setSelectedIndex(getZoomLevel().ordinal()); this.visibleChart = configuration.isExpandPlanningViewCharts(); @@ -571,12 +587,22 @@ public class Planner extends HtmlMacroComponent { } }; + private IGraphChangeListener showMoneyCostBarOnChange = new IGraphChangeListener() { + + @Override + public void execute() { + context.showMoneyCostBar(); + } + }; + private boolean containersExpandedByDefault = false; private boolean shownAdvanceByDefault = false; private boolean shownReportedHoursByDefault = false; + private boolean shownMoneyCostBarByDefault = false; + private FilterAndParentExpandedPredicates predicate; private boolean visibleChart; @@ -645,6 +671,26 @@ public class Planner extends HtmlMacroComponent { } } + public void showMoneyCostBar() { + Button showMoneyCostBarButton = (Button) getFellow("showMoneyCostBar"); + if (disabilityConfiguration.isMoneyCostBarEnabled()) { + if (isShowingMoneyCostBar) { + context.hideMoneyCostBar(); + diagramGraph + .removePostGraphChangeListener(showMoneyCostBarOnChange); + showMoneyCostBarButton.setSclass("planner-command"); + showMoneyCostBarButton.setTooltiptext(_("Show money cost bar")); + } else { + context.showMoneyCostBar(); + diagramGraph + .addPostGraphChangeListener(showMoneyCostBarOnChange); + showMoneyCostBarButton.setSclass("planner-command clicked"); + showMoneyCostBarButton.setTooltiptext(_("Hide money cost bar")); + } + isShowingMoneyCostBar = !isShowingMoneyCostBar; + } + } + public void showAllLabels() { Button showAllLabelsButton = (Button) getFellow("showAllLabels"); if (isShowingLabels) { @@ -732,6 +778,19 @@ public class Planner extends HtmlMacroComponent { return (areShownReportedHoursByDefault() || isShowingReportedHours); } + public void setAreShownMoneyCostBarByDefault( + boolean shownMoneyCostBarByDefault) { + this.shownMoneyCostBarByDefault = shownMoneyCostBarByDefault; + } + + public boolean areShownMoneyCostBarByDefault() { + return shownMoneyCostBarByDefault; + } + + public boolean showMoneyCostBarRightNow() { + return (areShownMoneyCostBarByDefault() || isShowingMoneyCostBar); + } + public void expandAll() { Button expandAllButton = (Button) getFellow("expandAll"); if (disabilityConfiguration.isExpandAllEnabled()) { diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java b/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java index 5c20e4709..88aa427fe 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/TaskComponent.java @@ -3,7 +3,7 @@ * * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e * Desenvolvemento Tecnolóxico de Galicia - * Copyright (C) 2010-2011 Igalia, S.L. + * Copyright (C) 2010-2012 Igalia, S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -60,6 +60,7 @@ import org.zkoss.zul.Div; * Graphical component which represents a {@link Task}. * * @author Javier Morán Rúa + * @author Manuel Rego Casasnovas */ public class TaskComponent extends Div implements AfterCompose { @@ -78,6 +79,8 @@ public class TaskComponent extends Div implements AfterCompose { private PropertyChangeListener showingReportedHoursPropertyListener; + private PropertyChangeListener showingMoneyCostBarPropertyListener; + public static TaskComponent asTaskComponent(Task task, IDisabilityConfiguration disabilityConfiguration, boolean isTopLevel) { @@ -278,6 +281,20 @@ public class TaskComponent extends Div implements AfterCompose { this.task .addReportedHoursPropertyChangeListener(showingReportedHoursPropertyListener); + if (showingMoneyCostBarPropertyListener == null) { + showingMoneyCostBarPropertyListener = new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (isInPage() && !(task instanceof Milestone)) { + updateCompletionMoneyCostBar(); + } + } + }; + } + this.task + .addMoneyCostBarPropertyChangeListener(showingMoneyCostBarPropertyListener); + if (criticalPathPropertyListener == null) { criticalPathPropertyListener = new PropertyChangeListener() { @@ -491,6 +508,7 @@ public class TaskComponent extends Div implements AfterCompose { return; } updateCompletionReportedHours(); + updateCompletionMoneyCostBar(); updateCompletionAdvance(); } @@ -507,6 +525,19 @@ public class TaskComponent extends Div implements AfterCompose { } } + public void updateCompletionMoneyCostBar() { + if (task.isShowingMoneyCostBar()) { + int startPixels = this.task.getBeginDate().toPixels(getMapper()); + String widthMoneyCostBar = pixelsFromStartUntil(startPixels, + this.task.getMoneyCostBarEndDate()) + "px"; + response(null, new AuInvoke(this, "resizeCompletionMoneyCostBar", + widthMoneyCostBar)); + } else { + response(null, new AuInvoke(this, "resizeCompletionMoneyCostBar", + "0px")); + } + } + private void updateCompletionAdvance() { if (task.isShowingAdvances()) { int startPixels = this.task.getBeginDate().toPixels(getMapper()); diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/adapters/IDisabilityConfiguration.java b/ganttzk/src/main/java/org/zkoss/ganttz/adapters/IDisabilityConfiguration.java index 3fa8307be..6f5b50b38 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/adapters/IDisabilityConfiguration.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/adapters/IDisabilityConfiguration.java @@ -3,7 +3,7 @@ * * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e * Desenvolvemento Tecnolóxico de Galicia - * Copyright (C) 2010-2011 Igalia, S.L. + * Copyright (C) 2010-2012 Igalia, S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -22,7 +22,7 @@ package org.zkoss.ganttz.adapters; /** * @author Óscar González Fernández - * + * @author Manuel Rego Casasnovas */ public interface IDisabilityConfiguration { @@ -40,6 +40,8 @@ public interface IDisabilityConfiguration { public boolean isReportedHoursEnabled(); + public boolean isMoneyCostBarEnabled(); + public boolean isExpandAllEnabled(); public boolean isFlattenTreeEnabled(); diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/adapters/PlannerConfiguration.java b/ganttzk/src/main/java/org/zkoss/ganttz/adapters/PlannerConfiguration.java index e9728222a..0931feeac 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/adapters/PlannerConfiguration.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/adapters/PlannerConfiguration.java @@ -148,6 +148,8 @@ public class PlannerConfiguration implements IDisabilityConfiguration { private boolean reportedHoursEnabled = true; + private boolean moneyCostBarEnabled = true; + private boolean expandAllEnabled = true; private boolean flattenTreeEnabled = true; @@ -345,6 +347,15 @@ public class PlannerConfiguration implements IDisabilityConfiguration { return reportedHoursEnabled; } + public void setMoneyCostBarEnabled(boolean moneyCostBarEnabled) { + this.moneyCostBarEnabled = moneyCostBarEnabled; + } + + @Override + public boolean isMoneyCostBarEnabled() { + return moneyCostBarEnabled; + } + public void setExpandAllEnabled(boolean expandAllEnabled) { this.expandAllEnabled = expandAllEnabled; } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/DefaultFundamentalProperties.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/DefaultFundamentalProperties.java index d85fc6233..5788dcfc9 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/DefaultFundamentalProperties.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/DefaultFundamentalProperties.java @@ -3,7 +3,7 @@ * * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e * Desenvolvemento Tecnolóxico de Galicia - * Copyright (C) 2010-2011 Igalia, S.L. + * Copyright (C) 2010-2012 Igalia, S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -34,6 +34,7 @@ import org.zkoss.ganttz.data.constraint.Constraint; /** * @author Óscar González Fernández + * @author Manuel Rego Casasnovas */ public class DefaultFundamentalProperties implements ITaskFundamentalProperties { @@ -47,10 +48,14 @@ public class DefaultFundamentalProperties implements ITaskFundamentalProperties private long hoursAdvanceEndDate; + private long moneyCostBarEndDate; + private Date advanceEndDate; private BigDecimal hoursAdvancePercentage; + private BigDecimal moneyCostBarPercentage; + private BigDecimal advancePercentage; private String tooltipText; @@ -92,15 +97,19 @@ public class DefaultFundamentalProperties implements ITaskFundamentalProperties public DefaultFundamentalProperties(String name, Date beginDate, long lengthMilliseconds, String notes, Date hoursAdvanceEndDate, + Date moneyCostBarEndDate, Date advanceEndDate, - BigDecimal hoursAdvancePercentage, BigDecimal advancePercentage) { + BigDecimal hoursAdvancePercentage, + BigDecimal moneyCostBarPercentage, BigDecimal advancePercentage) { this.name = name; this.beginDate = beginDate.getTime(); this.lengthMilliseconds = lengthMilliseconds; this.notes = notes; this.hoursAdvanceEndDate = hoursAdvanceEndDate.getTime(); + this.moneyCostBarEndDate = moneyCostBarEndDate.getTime(); this.advanceEndDate = advanceEndDate; this.hoursAdvancePercentage = hoursAdvancePercentage; + this.moneyCostBarPercentage = moneyCostBarPercentage; this.advancePercentage = advancePercentage; this.tooltipText = "Default tooltip"; this.labelsText = ""; @@ -169,6 +178,11 @@ public class DefaultFundamentalProperties implements ITaskFundamentalProperties return GanttDate.createFrom(new Date(hoursAdvanceEndDate)); } + @Override + public GanttDate getMoneyCostBarEndDate() { + return GanttDate.createFrom(new Date(moneyCostBarEndDate)); + } + @Override public GanttDate getAdvanceEndDate() { return advanceEndDate != null ? GanttDate.createFrom(new Date( diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java index 571891055..e05e6ec07 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/GanttDiagramGraph.java @@ -2427,4 +2427,4 @@ public class GanttDiagramGraph> implements return adapter.getChildren(task); } -} \ No newline at end of file +} diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/ITaskFundamentalProperties.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/ITaskFundamentalProperties.java index 0df1bf198..a09035f36 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/ITaskFundamentalProperties.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/ITaskFundamentalProperties.java @@ -3,7 +3,7 @@ * * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e * Desenvolvemento Tecnolóxico de Galicia - * Copyright (C) 2010-2011 Igalia, S.L. + * Copyright (C) 2010-2012 Igalia, S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -29,6 +29,7 @@ import org.zkoss.ganttz.data.constraint.Constraint; /** * @author Óscar González Fernández + * @author Manuel Rego Casasnovas */ public interface ITaskFundamentalProperties { @@ -76,6 +77,8 @@ public interface ITaskFundamentalProperties { public GanttDate getHoursAdvanceEndDate(); + public GanttDate getMoneyCostBarEndDate(); + public GanttDate getAdvanceEndDate(); public BigDecimal getHoursAdvancePercentage(); diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java b/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java index b1f9788a6..57e7b17a1 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/data/Task.java @@ -3,7 +3,7 @@ * * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e * Desenvolvemento Tecnolóxico de Galicia - * Copyright (C) 2010-2011 Igalia, S.L. + * Copyright (C) 2010-2012 Igalia, S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -47,7 +47,9 @@ import org.zkoss.ganttz.util.WeakReferencedListeners.Mode; /** * This class contains the information of a task. It can be modified and * notifies of the changes to the interested parties.
+ * * @author Óscar González Fernández + * @author Manuel Rego Casasnovas */ public abstract class Task implements ITaskFundamentalProperties { @@ -72,6 +74,9 @@ public abstract class Task implements ITaskFundamentalProperties { private PropertyChangeSupport reportedHoursProperty = new PropertyChangeSupport( this); + private PropertyChangeSupport moneyCostBarProperty = new PropertyChangeSupport( + this); + private final ITaskFundamentalProperties fundamentalProperties; private boolean visible = true; @@ -82,6 +87,8 @@ public abstract class Task implements ITaskFundamentalProperties { private boolean showingReportedHours = false; + private boolean showingMoneyCostBar = false; + private ConstraintViolationNotificator violationNotificator = ConstraintViolationNotificator .create(); @@ -241,6 +248,17 @@ public abstract class Task implements ITaskFundamentalProperties { return showingReportedHours; } + public void setShowingMoneyCostBar(boolean showingMoneyCostBar) { + boolean previousValue = this.showingMoneyCostBar; + this.showingMoneyCostBar = showingMoneyCostBar; + moneyCostBarProperty.firePropertyChange("showingMoneyCostBar", + previousValue, this.showingMoneyCostBar); + } + + public boolean isShowingMoneyCostBar() { + return showingMoneyCostBar; + } + public String getName() { return fundamentalProperties.getName(); } @@ -297,6 +315,11 @@ public abstract class Task implements ITaskFundamentalProperties { this.reportedHoursProperty.addPropertyChangeListener(listener); } + public void addMoneyCostBarPropertyChangeListener( + PropertyChangeListener listener) { + this.moneyCostBarProperty.addPropertyChangeListener(listener); + } + public void addFundamentalPropertiesChangeListener( PropertyChangeListener listener) { this.fundamentalPropertiesListeners.addPropertyChangeListener(listener); @@ -374,6 +397,11 @@ public abstract class Task implements ITaskFundamentalProperties { return fundamentalProperties.getHoursAdvanceEndDate(); } + @Override + public GanttDate getMoneyCostBarEndDate() { + return fundamentalProperties.getMoneyCostBarEndDate(); + } + @Override public GanttDate getAdvanceEndDate() { return fundamentalProperties.getAdvanceEndDate(); diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/extensions/ContextRelativeToOtherComponent.java b/ganttzk/src/main/java/org/zkoss/ganttz/extensions/ContextRelativeToOtherComponent.java index 14a3be66e..a0fd03996 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/extensions/ContextRelativeToOtherComponent.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/extensions/ContextRelativeToOtherComponent.java @@ -3,7 +3,7 @@ * * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e * Desenvolvemento Tecnolóxico de Galicia - * Copyright (C) 2010-2011 Igalia, S.L. + * Copyright (C) 2010-2012 Igalia, S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -35,7 +35,9 @@ import org.zkoss.zk.ui.Component; /** * An implementation of {@link IContext} that delegates to another context and * redefines its {@link IContext#getRelativeTo()} + * * @author Óscar González Fernández + * @author Manuel Rego Casasnovas */ public class ContextRelativeToOtherComponent implements IContext { @@ -147,4 +149,15 @@ public class ContextRelativeToOtherComponent implements IContext { public void showReportedHours() { context.showReportedHours(); } + + @Override + public void hideMoneyCostBar() { + context.hideMoneyCostBar(); + } + + @Override + public void showMoneyCostBar() { + context.showMoneyCostBar(); + } + } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/extensions/ContextWithPlannerTask.java b/ganttzk/src/main/java/org/zkoss/ganttz/extensions/ContextWithPlannerTask.java index a1ddd3c0d..59b09e8c2 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/extensions/ContextWithPlannerTask.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/extensions/ContextWithPlannerTask.java @@ -3,7 +3,7 @@ * * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e * Desenvolvemento Tecnolóxico de Galicia - * Copyright (C) 2010-2011 Igalia, S.L. + * Copyright (C) 2010-2012 Igalia, S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -36,7 +36,9 @@ import org.zkoss.zk.ui.Component; * An implementation of {@link IContextWithPlannerTask} that wraps another * context and specifies the task to be returned by * {@link IContextWithPlannerTask#getTask()} + * * @author Óscar González Fernández + * @author Manuel Rego Casasnovas */ public class ContextWithPlannerTask implements IContextWithPlannerTask { @@ -149,4 +151,15 @@ public class ContextWithPlannerTask implements IContextWithPlannerTask { public void showReportedHours() { context.showReportedHours(); } + + @Override + public void hideMoneyCostBar() { + context.hideMoneyCostBar(); + } + + @Override + public void showMoneyCostBar() { + context.showMoneyCostBar(); + } + } diff --git a/ganttzk/src/main/java/org/zkoss/ganttz/extensions/IContext.java b/ganttzk/src/main/java/org/zkoss/ganttz/extensions/IContext.java index c5b02d2a6..4465b3a72 100644 --- a/ganttzk/src/main/java/org/zkoss/ganttz/extensions/IContext.java +++ b/ganttzk/src/main/java/org/zkoss/ganttz/extensions/IContext.java @@ -3,7 +3,7 @@ * * Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e * Desenvolvemento Tecnolóxico de Galicia - * Copyright (C) 2010-2011 Igalia, S.L. + * Copyright (C) 2010-2012 Igalia, S.L. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -38,7 +38,9 @@ import org.zkoss.zk.ui.Component; /** * A facade for operations allowed to extensions
+ * * @author Óscar González Fernández + * @author Manuel Rego Casasnovas */ public interface IContext { @@ -143,4 +145,9 @@ public interface IContext { void showReportedHours(); void hideReportedHours(); + + void showMoneyCostBar(); + + void hideMoneyCostBar(); + } diff --git a/ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul b/ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul index c86c7a858..f3947a669 100644 --- a/ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul +++ b/ganttzk/src/main/resources/web/ganttz/zul/plannerLayout.zul @@ -3,7 +3,7 @@ Copyright (C) 2009-2010 Fundación para o Fomento da Calidade Industrial e Desenvolvemento Tecnolóxico de Galicia - Copyright (C) 2010-2011 Igalia, S.L. + Copyright (C) 2010-2012 Igalia, S.L. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by @@ -86,6 +86,12 @@ planner = self; sclass="planner-command"/> + - - - diff --git a/libreplan-webapp/src/main/webapp/users/_editUser.zul b/libreplan-webapp/src/main/webapp/users/_editUser.zul index 69ffcbac1..3c6703395 100644 --- a/libreplan-webapp/src/main/webapp/users/_editUser.zul +++ b/libreplan-webapp/src/main/webapp/users/_editUser.zul @@ -101,23 +101,12 @@ - - - diff --git a/pom.xml b/pom.xml index 40113ea01..80075596d 100644 --- a/pom.xml +++ b/pom.xml @@ -192,7 +192,7 @@ com.igalia.java.zk.components jfreechartengine - 1.0 + 1.1