Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorddunne2008-11-03 22:26:01 +0000
committerddunne2008-11-03 22:26:01 +0000
commit7c8a244f25e3fb5fee62ba7b41f53e50284619b8 (patch)
tree10aa2aee3f475ad58f7563fe803a924b70270e65
parente99475bc56a13b0bde07c256e8d392bdacb5cf02 (diff)
downloadorg.eclipse.osee-7c8a244f25e3fb5fee62ba7b41f53e50284619b8.tar.gz
org.eclipse.osee-7c8a244f25e3fb5fee62ba7b41f53e50284619b8.tar.xz
org.eclipse.osee-7c8a244f25e3fb5fee62ba7b41f53e50284619b8.zip
-rw-r--r--org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/DecisionReviewArtifact.java9
-rw-r--r--org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/PeerToPeerReviewArtifact.java14
-rw-r--r--org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/StateMachineArtifact.java16
-rw-r--r--org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TaskArtifact.java14
-rw-r--r--org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamWorkFlowArtifact.java19
-rw-r--r--org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/SMAMetrics.java444
-rw-r--r--org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/task/XTaskViewer.java42
-rw-r--r--org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldComposite.java68
-rw-r--r--org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldMetricsComposite.java79
-rw-r--r--org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XWidget.java11
-rw-r--r--org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphTable.java29
11 files changed, 538 insertions, 207 deletions
diff --git a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/DecisionReviewArtifact.java b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/DecisionReviewArtifact.java
index daec07c25e2..ce9f5e37511 100644
--- a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/DecisionReviewArtifact.java
+++ b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/DecisionReviewArtifact.java
@@ -163,14 +163,9 @@ public class DecisionReviewArtifact extends ReviewSMArtifact implements IReviewA
return null;
}
- /*
- * (non-Javadoc)
- *
- * @see osee.ats.world.IWorldViewArtifact#getWorldViewImplementer()
- */
@Override
- public String getWorldViewImplementer() throws OseeCoreException {
- return Artifacts.toString("; ", smaMgr.getStateMgr().getAssignees(DecisionReviewState.Decision.name()));
+ public Collection<User> getImplementers() throws OseeCoreException {
+ return getImplementersByState(DecisionReviewState.Decision.name());
}
/*
diff --git a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/PeerToPeerReviewArtifact.java b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/PeerToPeerReviewArtifact.java
index 41947a5e84a..89d1e0edf92 100644
--- a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/PeerToPeerReviewArtifact.java
+++ b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/PeerToPeerReviewArtifact.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.osee.ats.artifact;
+import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
@@ -180,14 +181,13 @@ public class PeerToPeerReviewArtifact extends ReviewSMArtifact implements IRevie
return null;
}
- /*
- * (non-Javadoc)
- *
- * @see osee.ats.world.IWorldViewArtifact#getWorldViewImplementer()
- */
@Override
- public String getWorldViewImplementer() throws OseeCoreException {
- return Artifacts.toString("; ", smaMgr.getStateMgr().getAssignees(PeerToPeerReviewState.Review.name()));
+ public Collection<User> getImplementers() throws OseeCoreException {
+ Collection<User> users = getImplementersByState(PeerToPeerReviewState.Review.name());
+ for (UserRole role : userRoleManager.getUserRoles()) {
+ users.add(role.getUser());
+ }
+ return users;
}
/*
diff --git a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/StateMachineArtifact.java b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/StateMachineArtifact.java
index 77e97dad3ec..5a081f53729 100644
--- a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/StateMachineArtifact.java
+++ b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/StateMachineArtifact.java
@@ -12,6 +12,7 @@ package org.eclipse.osee.ats.artifact;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
@@ -183,7 +184,20 @@ public abstract class StateMachineArtifact extends ATSArtifact implements IWorld
*/
@Override
public String getWorldViewImplementer() throws OseeCoreException {
- return null;
+ return Artifacts.toString("; ", getImplementers());
+ }
+
+ public Collection<User> getImplementersByState(String stateName) throws OseeCoreException {
+ Collection<User> users = smaMgr.getStateMgr().getAssignees(stateName);
+ LogItem item = smaMgr.getLog().getStateEvent(LogType.StateComplete, stateName);
+ if (item != null) {
+ users.add(item.getUser());
+ }
+ return users;
+ }
+
+ public Collection<User> getImplementers() throws OseeCoreException {
+ return Collections.emptyList();
}
/* (non-Javadoc)
diff --git a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TaskArtifact.java b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TaskArtifact.java
index 98ca51287e6..ae19b3ceb82 100644
--- a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TaskArtifact.java
+++ b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TaskArtifact.java
@@ -30,7 +30,6 @@ import org.eclipse.osee.framework.skynet.core.artifact.ArtifactFactory;
import org.eclipse.osee.framework.skynet.core.artifact.ArtifactType;
import org.eclipse.osee.framework.skynet.core.artifact.Branch;
import org.eclipse.osee.framework.skynet.core.artifact.IATSStateMachineArtifact;
-import org.eclipse.osee.framework.skynet.core.utility.Artifacts;
import org.eclipse.osee.framework.ui.plugin.util.Result;
import org.eclipse.osee.framework.ui.skynet.widgets.workflow.WorkPageDefinition;
@@ -281,18 +280,9 @@ public class TaskArtifact extends StateMachineArtifact implements IWorldViewArti
return null;
}
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.osee.ats.world.IWorldViewArtifact#getWorldViewImplementer()
- */
@Override
- public String getWorldViewImplementer() throws OseeCoreException {
- return Artifacts.toString("; ", getImplementers());
- }
-
- public Collection<User> getImplementers() {
- return smaMgr.getStateMgr().getAssignees(TaskStates.InWork.name());
+ public Collection<User> getImplementers() throws OseeCoreException {
+ return getImplementersByState(TaskStates.InWork.name());
}
/*
diff --git a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamWorkFlowArtifact.java b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamWorkFlowArtifact.java
index 4d5720eef4c..68f816e94f4 100644
--- a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamWorkFlowArtifact.java
+++ b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/artifact/TeamWorkFlowArtifact.java
@@ -291,7 +291,7 @@ public class TeamWorkFlowArtifact extends TaskableStateMachineArtifact implement
if (verArts.size() > 1) {
String errStr =
"Workflow " + smaMgr.getSma().getHumanReadableId() + " targeted for multiple versions: " + Artifacts.commaArts(verArts);
- OseeLog.log(AtsPlugin.class, Level.SEVERE, errStr, null);
+ OseeLog.log(AtsPlugin.class, Level.SEVERE, errStr, null);
return XViewerCells.getCellExceptionString(errStr);
}
VersionArtifact verArt = verArts.iterator().next();
@@ -299,7 +299,7 @@ public class TeamWorkFlowArtifact extends TaskableStateMachineArtifact implement
ATSAttributes.RELEASED_ATTRIBUTE.getStoreName(), false)) {
String errStr =
"Workflow " + smaMgr.getSma().getHumanReadableId() + " targeted for released version, but not completed: " + verArt;
- OseeLog.log(AtsPlugin.class, Level.SEVERE, errStr, null);
+ OseeLog.log(AtsPlugin.class, Level.SEVERE, errStr, null);
return XViewerCells.getCellExceptionString(errStr);
}
return verArt.getDescriptiveName();
@@ -351,8 +351,7 @@ public class TeamWorkFlowArtifact extends TaskableStateMachineArtifact implement
selectedAlias.add((ActionableItemArtifact) obj);
}
- ActionableItemsTx txWrapper =
- new ActionableItemsTx(BranchManager.getAtsBranch(), selectedAlias, null);
+ ActionableItemsTx txWrapper = new ActionableItemsTx(BranchManager.getAtsBranch(), selectedAlias, null);
txWrapper.execute();
toReturn = txWrapper.getResult();
}
@@ -416,8 +415,7 @@ public class TeamWorkFlowArtifact extends TaskableStateMachineArtifact implement
if (MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Confirm Convert", sb.toString())) {
Set<ActionableItemArtifact> toProcess = new HashSet<ActionableItemArtifact>();
toProcess.add(selectedAia);
- ActionableItemsTx txWrapper =
- new ActionableItemsTx(BranchManager.getAtsBranch(), toProcess, newTeamDef);
+ ActionableItemsTx txWrapper = new ActionableItemsTx(BranchManager.getAtsBranch(), toProcess, newTeamDef);
txWrapper.execute();
toReturn = txWrapper.getResult();
}
@@ -492,14 +490,9 @@ public class TeamWorkFlowArtifact extends TaskableStateMachineArtifact implement
return date;
}
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.osee.ats.world.IWorldViewArtifact#getWorldViewImplementer()
- */
@Override
- public String getWorldViewImplementer() throws OseeCoreException {
- return Artifacts.toString("; ", smaMgr.getStateMgr().getAssignees(DefaultTeamState.Implement.name()));
+ public Collection<User> getImplementers() throws OseeCoreException {
+ return getImplementersByState(DefaultTeamState.Implement.name());
}
/*
diff --git a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/SMAMetrics.java b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/SMAMetrics.java
index ff16586501a..267844a8356 100644
--- a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/SMAMetrics.java
+++ b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/SMAMetrics.java
@@ -12,14 +12,17 @@ package org.eclipse.osee.ats.util;
import java.util.Collection;
import java.util.Date;
-import java.util.logging.Level;
-import org.eclipse.osee.ats.AtsPlugin;
+import java.util.HashSet;
+import java.util.Set;
import org.eclipse.osee.ats.artifact.ActionArtifact;
+import org.eclipse.osee.ats.artifact.ReviewSMArtifact;
import org.eclipse.osee.ats.artifact.StateMachineArtifact;
import org.eclipse.osee.ats.artifact.TaskArtifact;
import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
import org.eclipse.osee.ats.artifact.VersionArtifact;
-import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
+import org.eclipse.osee.framework.jdk.core.type.HashCollection;
+import org.eclipse.osee.framework.skynet.core.User;
import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
@@ -28,94 +31,373 @@ import org.eclipse.osee.framework.ui.skynet.widgets.XDate;
*/
public class SMAMetrics {
+ private static double manDayHrs = 7.2;
private static int MILLISECS_PER_DAY = (1000 * 60 * 60 * 24);
- public static String getEstRemainMetrics(Collection<StateMachineArtifact> smas) {
- if (smas.size() == 0) return "";
- try {
- int numTeamWfs = 0;
- int numTasks = 0;
- for (Artifact art : smas) {
- if (art instanceof TeamWorkFlowArtifact) {
- smas.add((TeamWorkFlowArtifact) art);
- numTeamWfs++;
- } else if ((art instanceof ActionArtifact) && ((ActionArtifact) art).getTeamWorkFlowArtifacts().size() > 0) {
- smas.addAll(((ActionArtifact) art).getTeamWorkFlowArtifacts());
- numTeamWfs += ((ActionArtifact) art).getTeamWorkFlowArtifacts().size();
- } else if (art instanceof TaskArtifact) {
- smas.add((TaskArtifact) art);
- numTasks++;
- }
- }
- int numObjects = numTasks + numTeamWfs;
- double estHours = 0;
- double hrsRemain = 0;
- double hrsSpent = 0;
- double manDaysNeeded = 0;
- double totalPercentComplete = 0;
- for (StateMachineArtifact team : smas) {
- hrsRemain += team.getWorldViewRemainHours();
- estHours += team.getWorldViewEstimatedHours();
- hrsSpent += team.getWorldViewHoursSpentTotal();
- manDaysNeeded += team.getWorldViewManDaysNeeded();
- totalPercentComplete += team.getWorldViewPercentCompleteTotal();
+ double estHours = 0;
+ double hrsRemain = 0;
+ double hrsSpent = 0;
+ double manDaysNeeded = 0;
+ double cummulativePercentComplete = 0;
+ double percentCompleteByTeamPercents = 0;
+ double percentCompleteByWorkflow = 0;
+ int numObjects = 0;
+
+ /**
+ * @return the numObjects
+ */
+ public int getNumObjects() {
+ return numObjects;
+ }
+
+ Date estRelDate;
+ long daysTillRel = 0;
+ VersionArtifact versionArtifact = null;
+ String str = "";
+ Set<TeamWorkFlowArtifact> teamArts = new HashSet<TeamWorkFlowArtifact>();
+ Set<ActionArtifact> actionArts = new HashSet<ActionArtifact>();
+ Set<TaskArtifact> taskArts = new HashSet<TaskArtifact>();
+ Set<ReviewSMArtifact> reviewArts = new HashSet<ReviewSMArtifact>();
+ Set<StateMachineArtifact> smas = new HashSet<StateMachineArtifact>();
+ Set<User> assignees = new HashSet<User>();
+ Set<User> assigneesAssignedOrCompleted = new HashSet<User>();
+ Set<StateMachineArtifact> smasInherited = new HashSet<StateMachineArtifact>();
+
+ private final HashCollection<User, Artifact> userToAssignedSmas =
+ new HashCollection<User, Artifact>(true, HashSet.class, 100);
+ private final HashCollection<User, Artifact> userToCompletedSmas =
+ new HashCollection<User, Artifact>(true, HashSet.class, 100);
+
+ /**
+ * @return the userToCompletedSmas
+ */
+ public HashCollection<User, Artifact> getUserToCompletedSmas() {
+ return userToCompletedSmas;
+ }
+
+ /**
+ * @return the manDayHrs
+ */
+ public static double getManDayHrs() {
+ return manDayHrs;
+ }
+
+ /**
+ * @return the teamArts
+ */
+ public Set<TeamWorkFlowArtifact> getTeamArts() {
+ return teamArts;
+ }
+
+ /**
+ * @return the actionArts
+ */
+ public Set<ActionArtifact> getActionArts() {
+ return actionArts;
+ }
+
+ /**
+ * @return the taskArts
+ */
+ public Set<TaskArtifact> getTaskArts() {
+ return taskArts;
+ }
+
+ /**
+ * @return the reviewArts
+ */
+ public Set<ReviewSMArtifact> getReviewArts() {
+ return reviewArts;
+ }
+
+ /**
+ * @return the userToSmas
+ */
+ public HashCollection<User, Artifact> getUserToAssignedSmas() {
+ return userToAssignedSmas;
+ }
+
+ /**
+ * @return the estRelDate
+ */
+ public Date getEstRelDate() {
+ return estRelDate;
+ }
+
+ /**
+ * @param estRelDate the estRelDate to set
+ */
+ public void setEstRelDate(Date estRelDate) {
+ this.estRelDate = estRelDate;
+ }
+
+ /**
+ * @return the daysTillRel
+ */
+ public long getDaysTillRel() {
+ return daysTillRel;
+ }
+
+ /**
+ * @param daysTillRel the daysTillRel to set
+ */
+ public void setDaysTillRel(int daysTillRel) {
+ this.daysTillRel = daysTillRel;
+ }
+
+ /**
+ * @return the versionArtifact
+ */
+ public VersionArtifact getVersionArtifact() {
+ return versionArtifact;
+ }
+
+ /**
+ * @param versionArtifact the versionArtifact to set
+ */
+ public void setVersionArtifact(VersionArtifact versionArtifact) {
+ this.versionArtifact = versionArtifact;
+ }
+
+ /**
+ * @return the numTeamWfs
+ */
+ public int getNumTeamWfs() {
+ return teamArts.size();
+ }
+
+ /**
+ * @return the numTasks
+ */
+ public int getNumTasks() {
+ return taskArts.size();
+ }
+
+ /**
+ * @return the numTasks
+ */
+ public int getNumActions() {
+ return actionArts.size();
+ }
+
+ /**
+ * @return the numTasks
+ */
+ public int getNumReviews() {
+ return reviewArts.size();
+ }
+
+ /**
+ * @return the estHours
+ */
+ public double getEstHours() {
+ return estHours;
+ }
+
+ /**
+ * @param estHours the estHours to set
+ */
+ public void setEstHours(double estHours) {
+ this.estHours = estHours;
+ }
+
+ /**
+ * @return the hrsRemain
+ */
+ public double getHrsRemain() {
+ return hrsRemain;
+ }
+
+ /**
+ * @param hrsRemain the hrsRemain to set
+ */
+ public void setHrsRemain(double hrsRemain) {
+ this.hrsRemain = hrsRemain;
+ }
+
+ /**
+ * @return the hrsSpent
+ */
+ public double getHrsSpent() {
+ return hrsSpent;
+ }
+
+ /**
+ * @param hrsSpent the hrsSpent to set
+ */
+ public void setHrsSpent(double hrsSpent) {
+ this.hrsSpent = hrsSpent;
+ }
+
+ /**
+ * @return the manDaysNeeded
+ */
+ public double getManDaysNeeded() {
+ return manDaysNeeded;
+ }
+
+ /**
+ * @param manDaysNeeded the manDaysNeeded to set
+ */
+ public void setManDaysNeeded(double manDaysNeeded) {
+ this.manDaysNeeded = manDaysNeeded;
+ }
+
+ /**
+ * @return the cummulativePercentComplete
+ */
+ public double getCummulativePercentComplete() {
+ return cummulativePercentComplete;
+ }
+
+ /**
+ * @param cummulativePercentComplete the cummulativePercentComplete to set
+ */
+ public void setCummulativePercentComplete(double cummulativePercentComplete) {
+ this.cummulativePercentComplete = cummulativePercentComplete;
+ }
+
+ /**
+ * @return the percentComplete
+ */
+ public double getPercentCompleteByTeamPercents() {
+ return percentCompleteByTeamPercents;
+ }
+
+ public Collection<TeamWorkFlowArtifact> getCompletedTeamWorkflows() {
+ Set<TeamWorkFlowArtifact> teams = new HashSet<TeamWorkFlowArtifact>();
+ for (TeamWorkFlowArtifact team : getTeamArts()) {
+ if (team.getSmaMgr().isCancelledOrCompleted()) {
+ teams.add(team);
}
- double percentComplete = 0;
- if (numObjects > 0 && totalPercentComplete > 0) percentComplete = totalPercentComplete / numObjects;
- return String.format(" Selected %s %s EstHrs: %5.2f %sCmp: %5.2f RmnHrs: %5.2f HrsSpnt: %5.2f %s",
- (numTeamWfs > 0 ? "TeamWFs: " + numTeamWfs : ""), (numTasks > 0 ? "Tasks: " + numTasks : ""), estHours,
- "%", percentComplete, hrsRemain, hrsSpent, (manDaysNeeded > 0 ? String.format("ManDaysNeeded: %5.2f ",
- manDaysNeeded) : ""));
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return "Exception occurred - see log";
}
+ return teams;
}
- private static double manDayHrs = 7.2;
+ public double getPercentCompleteByWorkflow() {
+ if (getTeamArts().size() == 0) return 100;
+ double completed = getCompletedTeamWorkflows().size();
+ if (completed == 0) return 0;
+ return completed / getTeamArts().size() * 100;
+ }
- public static String getReleaseEstRemainMetrics(Collection<StateMachineArtifact> smas) {
- if (smas.size() == 0) return "";
- try {
- Artifact art = smas.iterator().next();
- TeamWorkFlowArtifact selTeam = null;
- if (art instanceof TeamWorkFlowArtifact)
- selTeam = (TeamWorkFlowArtifact) art;
- else if ((art instanceof ActionArtifact) && ((ActionArtifact) art).getTeamWorkFlowArtifacts().size() == 1) selTeam =
- ((ActionArtifact) art).getTeamWorkFlowArtifacts().iterator().next();
- if (selTeam != null) {
- if (selTeam.getTargetedForVersion() != null) {
- VersionArtifact verArt = selTeam.getTargetedForVersion();
- Collection<TeamWorkFlowArtifact> teams = verArt.getTargetedForTeamArtifacts();
- double estHours = 0;
- double hrsRemain = 0;
- double hrsSpent = 0;
- for (TeamWorkFlowArtifact team : teams) {
- hrsRemain += team.getWorldViewRemainHours();
- estHours += team.getWorldViewEstimatedHours();
- hrsSpent += team.getHoursSpentSMATotal();
- }
- Date estRelDate = verArt.getEstimatedReleaseDate();
- double manDaysNeeded = 0;
- if (hrsRemain != 0) manDaysNeeded = hrsRemain / manDayHrs;
- String daysLeft = "";
- Date today = new Date();
- long daysTillRel = 0;
- if (estRelDate != null && estRelDate.after(today)) {
- daysTillRel = (estRelDate.getTime() - today.getTime()) / MILLISECS_PER_DAY;
- daysLeft = String.format(" DaysLft: %d", daysTillRel);
- }
- return String.format(
- " Target Version: %s EstRelDate: %s %s TeamWFs: %s EstHrs: %5.2f RmnHrs: %5.2f HrsSpnt: %5.2f ManDaysNeeded: %5.2f ",
- verArt.getDescriptiveName(), XDate.getDateStr(estRelDate, XDate.MMDDYY), daysLeft, teams.size(),
- estHours, hrsRemain, hrsSpent, manDaysNeeded);
+ /**
+ * @return the str
+ */
+ @Override
+ public String toString() {
+ return str;
+ }
+ public static String getEstRemainMetrics(Collection<? extends Artifact> smas) throws OseeCoreException {
+ return new SMAMetrics(smas).str;
+ }
+
+ public SMAMetrics(Collection<? extends Artifact> smas) throws OseeCoreException {
+ this(smas, null);
+ }
+
+ public SMAMetrics(Collection<? extends Artifact> artifacts, VersionArtifact versionArtifact) throws OseeCoreException {
+ this.versionArtifact = versionArtifact;
+ if (artifacts.size() == 0) return;
+ getInheritedSmasRecursive(artifacts, smasInherited);
+ for (Artifact art : artifacts) {
+ if (art instanceof ActionArtifact) {
+ actionArts.add((ActionArtifact) art);
+ }
+ }
+ for (Artifact art : smasInherited) {
+ if (art instanceof TeamWorkFlowArtifact) {
+ teamArts.add((TeamWorkFlowArtifact) art);
+ } else if (art instanceof TaskArtifact) {
+ taskArts.add((TaskArtifact) art);
+ } else if (art instanceof ReviewSMArtifact) {
+ reviewArts.add((ReviewSMArtifact) art);
+ }
+ if (art instanceof StateMachineArtifact) {
+ smas.add((StateMachineArtifact) art);
+ Collection<User> users = ((StateMachineArtifact) art).getSmaMgr().getStateMgr().getAssignees();
+ assignees.addAll(users);
+ assigneesAssignedOrCompleted.addAll(users);
+ for (User user : users) {
+ userToAssignedSmas.put(user, art);
+ }
+ if (((StateMachineArtifact) art).getSmaMgr().isCompleted()) {
+ Collection<User> implementers = ((StateMachineArtifact) art).getImplementers();
+ assigneesAssignedOrCompleted.addAll(implementers);
+ for (User user : implementers) {
+ userToCompletedSmas.put(user, art);
+ }
}
}
- } catch (Exception ex) {
- OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- return "Exception occurred - see log";
}
- return "";
+ numObjects = getNumTasks() + getNumTeamWfs() + getNumReviews();
+ estHours = 0;
+ hrsRemain = 0;
+ hrsSpent = 0;
+ manDaysNeeded = 0;
+ cummulativePercentComplete = 0;
+ manDaysNeeded = 0;
+ for (TeamWorkFlowArtifact team : teamArts) {
+ hrsRemain += team.getWorldViewRemainHours();
+ estHours += team.getWorldViewEstimatedHours();
+ hrsSpent += team.getWorldViewHoursSpentTotal();
+ manDaysNeeded += team.getWorldViewManDaysNeeded();
+ cummulativePercentComplete += team.getWorldViewPercentCompleteTotal();
+ }
+ if (hrsRemain != 0) manDaysNeeded = hrsRemain / manDayHrs;
+ percentCompleteByTeamPercents = 0;
+ if (numObjects > 0 && cummulativePercentComplete > 0) {
+ percentCompleteByTeamPercents = cummulativePercentComplete / numObjects;
+ }
+
+ estRelDate = null;
+ Date today = new Date();
+ daysTillRel = 0;
+ if (versionArtifact != null) {
+ estRelDate = versionArtifact.getEstimatedReleaseDate();
+ if (estRelDate != null && estRelDate.after(today)) {
+ daysTillRel = (estRelDate.getTime() - today.getTime()) / MILLISECS_PER_DAY;
+ }
+ }
+ str =
+ String.format("TeamWFs: %s Tasks: %s EstHrs: %5.2f %sCmp: %5.2f RmnHrs: %5.2f HrsSpnt: %5.2f %s %s",
+ getNumTeamWfs(), getNumTasks(), estHours, "%", percentCompleteByTeamPercents, hrsRemain, hrsSpent,
+ (manDaysNeeded > 0 ? String.format("ManDaysNeeded: %5.2f ", manDaysNeeded) : ""),
+ (versionArtifact != null ? String.format("Version: %s EstRelDate: %s DaysLeft: %d ",
+ versionArtifact.getDescriptiveName(), (estRelDate == null ? "Not Set" : XDate.getDateStr(
+ estRelDate, XDate.MMDDYY)), daysTillRel) : ""));
+ }
+
+ /**
+ * @return the assigneesAssignedOrCompleted
+ */
+ public Set<User> getAssigneesAssignedOrCompleted() {
+ return assigneesAssignedOrCompleted;
}
+
+ public void getInheritedSmasRecursive(Collection<? extends Artifact> artifacts, Set<StateMachineArtifact> smas) throws OseeCoreException {
+ for (Artifact art : artifacts) {
+ if (art instanceof StateMachineArtifact) {
+ StateMachineArtifact sma = (StateMachineArtifact) art;
+ smas.add(sma);
+ smas.addAll(sma.getSmaMgr().getReviewManager().getReviews());
+ getInheritedSmasRecursive(sma.getSmaMgr().getReviewManager().getReviews(), smas);
+ smas.addAll(sma.getSmaMgr().getTaskMgr().getTaskArtifacts());
+ } else if (art instanceof ActionArtifact) {
+ smas.addAll(((ActionArtifact) art).getTeamWorkFlowArtifacts());
+ getInheritedSmasRecursive(((ActionArtifact) art).getTeamWorkFlowArtifacts(), smas);
+ }
+ }
+ }
+
+ public String toStringLong() {
+ return String.format(
+ "Actions: %s Team Workflows: %s Reviews: %s Tasks: %s \nEstimated Hours: %5.2f Percent Complete: %5.2f Remaining Hours: %5.2f ManDaysNeeded: %5.2f \nHours Spent: %5.2f %s",
+ getNumActions(), getNumTeamWfs(), getNumReviews(), getNumTasks(), estHours, percentCompleteByTeamPercents,
+ hrsRemain, manDaysNeeded, hrsSpent, (versionArtifact != null ? String.format(
+ "\nVersion: %s Estimated Release Date: %s Days Left: %d ", versionArtifact.getDescriptiveName(),
+ (estRelDate == null ? "Not Set" : XDate.getDateStr(estRelDate, XDate.MMDDYY)), daysTillRel) : ""));
+ }
+
}
diff --git a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/task/XTaskViewer.java b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/task/XTaskViewer.java
index bb1084416c9..e4132575e9d 100644
--- a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/task/XTaskViewer.java
+++ b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/util/widgets/task/XTaskViewer.java
@@ -140,7 +140,11 @@ public class XTaskViewer extends XWidget implements IActionable {
xViewer.setLabelProvider(new TaskLabelProvider(xViewer));
xViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
- updateExtraInfoLine();
+ try {
+ updateExtraInfoLine();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
+ }
}
});
xViewer.getTree().addKeyListener(new KeyListener() {
@@ -148,21 +152,25 @@ public class XTaskViewer extends XWidget implements IActionable {
}
public void keyReleased(KeyEvent event) {
- if ((event.stateMask & SWT.MODIFIER_MASK) == SWT.CTRL) {
- if (event.keyCode == 'a') {
- xViewer.getTree().setSelection(xViewer.getTree().getItems());
- updateExtraInfoLine();
- } else if (event.keyCode == 'x') {
- if (selectionMetricsMenuItem != null) {
- selectionMetricsMenuItem.setSelection(!selectionMetricsMenuItem.getSelection());
+ try {
+ if ((event.stateMask & SWT.MODIFIER_MASK) == SWT.CTRL) {
+ if (event.keyCode == 'a') {
+ xViewer.getTree().setSelection(xViewer.getTree().getItems());
updateExtraInfoLine();
- }
- } else if (event.keyCode == 'f') {
- if (filterCompletedMenuItem != null) {
- filterCompletedMenuItem.setSelection(!filterCompletedMenuItem.getSelection());
- handleFilterAction();
+ } else if (event.keyCode == 'x') {
+ if (selectionMetricsMenuItem != null) {
+ selectionMetricsMenuItem.setSelection(!selectionMetricsMenuItem.getSelection());
+ updateExtraInfoLine();
+ }
+ } else if (event.keyCode == 'f') {
+ if (filterCompletedMenuItem != null) {
+ filterCompletedMenuItem.setSelection(!filterCompletedMenuItem.getSelection());
+ handleFilterAction();
+ }
}
}
+ } catch (OseeCoreException ex) {
+ OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
}
}
});
@@ -297,7 +305,7 @@ public class XTaskViewer extends XWidget implements IActionable {
}
- public void updateExtraInfoLine() {
+ public void updateExtraInfoLine() throws OseeCoreException {
if (selectionMetricsMenuItem != null && selectionMetricsMenuItem.getSelection())
extraInfoLabel.setText(SMAMetrics.getEstRemainMetrics(getXViewer().getSelectedSMAArtifacts()));
else
@@ -337,7 +345,11 @@ public class XTaskViewer extends XWidget implements IActionable {
selectionMetricsMenuItem.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
- updateExtraInfoLine();
+ try {
+ updateExtraInfoLine();
+ } catch (Exception ex) {
+ OSEELog.logException(AtsPlugin.class, ex, true);
+ }
}
});
diff --git a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldComposite.java b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldComposite.java
index ca41a5fc509..2ce358ab780 100644
--- a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldComposite.java
+++ b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldComposite.java
@@ -30,7 +30,9 @@ import org.eclipse.jface.viewers.Viewer;
import org.eclipse.osee.ats.AtsPlugin;
import org.eclipse.osee.ats.actions.NewAction;
import org.eclipse.osee.ats.artifact.ActionArtifact;
+import org.eclipse.osee.ats.artifact.StateMachineArtifact;
import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
+import org.eclipse.osee.ats.artifact.VersionArtifact;
import org.eclipse.osee.ats.navigate.AtsNavigateViewItems;
import org.eclipse.osee.ats.util.SMAMetrics;
import org.eclipse.osee.ats.world.search.WorldSearchItem;
@@ -163,7 +165,11 @@ public class WorldComposite extends Composite implements IFrameworkTransactionEv
xViewer.addSelectionChangedListener(new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
- updateExtraInfoLine();
+ try {
+ updateExtraInfoLine();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
+ }
}
});
xViewer.getTree().addKeyListener(new KeyListener() {
@@ -175,7 +181,11 @@ public class WorldComposite extends Composite implements IFrameworkTransactionEv
if ((event.stateMask & SWT.MODIFIER_MASK) == SWT.CTRL) {
if (event.keyCode == 'a') {
xViewer.getTree().setSelection(xViewer.getTree().getItems());
- updateExtraInfoLine();
+ try {
+ updateExtraInfoLine();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
+ }
} else if (event.keyCode == 'z') {
releaseMetricsAction.setChecked(!releaseMetricsAction.isChecked());
releaseMetricsAction.run();
@@ -390,26 +400,38 @@ public class WorldComposite extends Composite implements IFrameworkTransactionEv
public void setTableTitle(final String title, final boolean warning) {
Displays.ensureInDisplayThread(new Runnable() {
public void run() {
- if (warning)
- warningLabel.setImage(AtsPlugin.getInstance().getImage("warn.gif"));
- else
- warningLabel.setImage(null);
- searchNameLabel.setText(title);
- searchNameLabel.getParent().layout();
- xViewer.setReportingTitle(title + " - " + XDate.getDateNow());
- updateExtraInfoLine();
+ try {
+ if (warning)
+ warningLabel.setImage(AtsPlugin.getInstance().getImage("warn.gif"));
+ else
+ warningLabel.setImage(null);
+ searchNameLabel.setText(title);
+ searchNameLabel.getParent().layout();
+ xViewer.setReportingTitle(title + " - " + XDate.getDateNow());
+ updateExtraInfoLine();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
+ }
};
});
}
- public void updateExtraInfoLine() {
+ public void updateExtraInfoLine() throws OseeCoreException {
if (extraInfoLabel == null || extraInfoLabel.isDisposed()) return;
+ String str = "";
if (releaseMetricsAction.isChecked()) {
- extraInfoLabel.setText(SMAMetrics.getReleaseEstRemainMetrics(getXViewer().getSelectedSMAArtifacts()));
+ VersionArtifact verArt = null;
+ Set<StateMachineArtifact> smaArts = getXViewer().getSelectedSMAArtifacts();
+ if (smaArts.size() != 0) {
+ verArt = smaArts.iterator().next().getTargetedForVersion();
+ SMAMetrics sMet = new SMAMetrics(smaArts, verArt);
+ str = sMet.toString();
+ }
} else if (selectionMetricsAction.isChecked()) {
- extraInfoLabel.setText(SMAMetrics.getEstRemainMetrics(getXViewer().getSelectedSMAArtifacts()));
+ SMAMetrics sMet = new SMAMetrics(getXViewer().getSelectedSMAArtifacts(), null);
+ str = sMet.toString();
} else
- extraInfoLabel.setText("");
+ extraInfoLabel.setText(str);
extraInfoLabel.getParent().layout();
}
@@ -516,7 +538,11 @@ public class WorldComposite extends Composite implements IFrameworkTransactionEv
@Override
public void run() {
if (releaseMetricsAction.isChecked()) selectionMetricsAction.setChecked(false);
- updateExtraInfoLine();
+ try {
+ updateExtraInfoLine();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
+ }
}
};
releaseMetricsAction.setToolTipText("Show Release Metrics by Release Version - Ctrl-Z");
@@ -526,7 +552,11 @@ public class WorldComposite extends Composite implements IFrameworkTransactionEv
@Override
public void run() {
if (selectionMetricsAction.isChecked()) releaseMetricsAction.setChecked(false);
- updateExtraInfoLine();
+ try {
+ updateExtraInfoLine();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
+ }
}
};
selectionMetricsAction.setToolTipText("Show Release Metrics by Selection - Ctrl-X");
@@ -715,7 +745,11 @@ public class WorldComposite extends Composite implements IFrameworkTransactionEv
Displays.ensureInDisplayThread(new Runnable() {
@Override
public void run() {
- updateExtraInfoLine();
+ try {
+ updateExtraInfoLine();
+ } catch (OseeCoreException ex) {
+ OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
+ }
}
});
}
diff --git a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldMetricsComposite.java b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldMetricsComposite.java
index cd87227adbc..b065e489d82 100644
--- a/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldMetricsComposite.java
+++ b/org.eclipse.osee.ats/src/org/eclipse/osee/ats/world/WorldMetricsComposite.java
@@ -5,20 +5,14 @@
*/
package org.eclipse.osee.ats.world;
-import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import java.util.logging.Level;
import org.eclipse.osee.ats.AtsPlugin;
-import org.eclipse.osee.ats.artifact.ActionArtifact;
-import org.eclipse.osee.ats.artifact.ReviewSMArtifact;
-import org.eclipse.osee.ats.artifact.TaskArtifact;
-import org.eclipse.osee.ats.artifact.TeamWorkFlowArtifact;
+import org.eclipse.osee.ats.util.SMAMetrics;
import org.eclipse.osee.framework.db.connection.exception.OseeCoreException;
import org.eclipse.osee.framework.logging.OseeLog;
-import org.eclipse.osee.framework.skynet.core.artifact.Artifact;
+import org.eclipse.osee.framework.skynet.core.User;
import org.eclipse.osee.framework.ui.skynet.widgets.XWidget;
import org.eclipse.osee.framework.ui.skynet.widgets.xbargraph.XBarGraphTable;
import org.eclipse.osee.framework.ui.swt.ALayout;
@@ -59,17 +53,12 @@ public class WorldMetricsComposite extends Composite {
adapt(this);
creatToolBar(this);
- // try {
- // handleUpdateMetrics();
- // } catch (OseeCoreException ex) {
- // OseeLog.log(AtsPlugin.class, Level.SEVERE, ex);
- // }
}
private void creatToolBar(Composite composite) {
toolBarComposite = new Composite(composite, SWT.NONE);
toolBarComposite.setLayoutData(new GridData(SWT.LEFT, SWT.NONE, false, false, 1, 1));
- toolBarComposite.setLayout(ALayout.getZeroMarginLayout(1, false));
+ toolBarComposite.setLayout(new GridLayout(1, false));
adapt(toolBarComposite);
ToolBar toolBar = new ToolBar(toolBarComposite, SWT.FLAT | SWT.RIGHT);
@@ -106,56 +95,58 @@ public class WorldMetricsComposite extends Composite {
adapt(metricsComposite);
addSpace();
+ SMAMetrics sMet = new SMAMetrics(worldComposite.getLoadedArtifacts(), null);
Label label = new Label(metricsComposite, SWT.NONE);
- label.setText("Number of Workflows: " + getLoadedWorkflowArtifacts().size());
+ label.setText(sMet.toStringLong());
adapt(label);
addSpace();
- createFullPercentChart(metricsComposite);
+ createFullPercentChart(sMet, metricsComposite);
addSpace();
- createAssigneesChart(metricsComposite);
+ createCompletedByAssigneesChart(sMet, metricsComposite);
layout();
}
- private Collection<TeamWorkFlowArtifact> getLoadedWorkflowArtifacts() throws OseeCoreException {
- Set<TeamWorkFlowArtifact> teams = new HashSet<TeamWorkFlowArtifact>();
- for (Artifact art : worldComposite.getLoadedArtifacts()) {
- if (art instanceof ActionArtifact) {
- teams.addAll(((ActionArtifact) art).getTeamWorkFlowArtifacts());
- }
- if (art instanceof TeamWorkFlowArtifact) {
- teams.add((TeamWorkFlowArtifact) art);
- }
- if (art instanceof TaskArtifact) {
- teams.add(((TaskArtifact) art).getParentTeamWorkflow());
- }
- if (art instanceof ReviewSMArtifact) {
- teams.add(((ReviewSMArtifact) art).getParentTeamWorkflow());
- }
- }
- return teams;
- }
-
private void addSpace() {
Label label = new Label(metricsComposite, SWT.NONE);
label.setText(" ");
adapt(label);
}
- public void createFullPercentChart(Composite parent) {
+ public void createFullPercentChart(SMAMetrics sMet, Composite parent) {
Map<String, Integer> itemToValueMap = new HashMap<String, Integer>();
- itemToValueMap.put("All", 85);
- XBarGraphTable table = new XBarGraphTable("Complete", "Loaded", "Complete", itemToValueMap);
+ itemToValueMap.put(
+ "By Team Percents (" + sMet.getCummulativePercentComplete() + "/" + sMet.getNumObjects() + ")",
+ (int) sMet.getPercentCompleteByTeamPercents());
+ itemToValueMap.put(
+ "By Team Workflow (" + sMet.getCompletedTeamWorkflows().size() + "/" + sMet.getNumTeamWfs() + ")",
+ (int) sMet.getPercentCompleteByWorkflow());
+ XBarGraphTable table = new XBarGraphTable("Total Percent Complete", "", "Percent Complete", itemToValueMap);
+ table.setFillHorizontally(true);
table.createWidgets(parent, 1);
adapt(table);
}
- public void createAssigneesChart(Composite parent) {
+ public void createCompletedByAssigneesChart(SMAMetrics sMet, Composite parent) {
Map<String, Integer> itemToValueMap = new HashMap<String, Integer>();
- itemToValueMap.put("Don", 85);
- itemToValueMap.put("Ryan", 35);
- itemToValueMap.put("Andy", 4);
- XBarGraphTable table = new XBarGraphTable("Complete by Assignee", "User", "Complete", itemToValueMap);
+ for (User user : sMet.getAssigneesAssignedOrCompleted()) {
+ int completed =
+ sMet.getUserToCompletedSmas().containsKey(user) ? sMet.getUserToCompletedSmas().getValues(user).size() : 0;
+ int inWork =
+ sMet.getUserToAssignedSmas().containsKey(user) ? sMet.getUserToAssignedSmas().getValues(user).size() : 0;
+ int total = completed + inWork;
+ int percentComplete = 0;
+ if (completed == total) {
+ percentComplete = 100;
+ } else if (completed != 0 && total != 0) {
+ double percent = new Double(completed) / total * 100.0;
+ percentComplete = (int) percent;
+ }
+ itemToValueMap.put(user.getName() + "(" + completed + "/" + total + ")", percentComplete);
+ }
+ XBarGraphTable table =
+ new XBarGraphTable("Completed by Assignee", "User", "Percent Complete", itemToValueMap, "%");
+ table.setFillHorizontally(true);
table.createWidgets(parent, 1);
adapt(table);
}
diff --git a/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XWidget.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XWidget.java
index 915b0fc73e5..0dbe978c54d 100644
--- a/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XWidget.java
+++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XWidget.java
@@ -47,8 +47,16 @@ public abstract class XWidget {
protected boolean verticalLabel = false;
protected boolean fillVertically = false;
protected boolean fillHorizontally = false;
+
+ /**
+ * @return the fillHorizontally
+ */
+ public boolean isFillHorizontally() {
+ return fillHorizontally;
+ }
+
protected boolean displayLabel = true;
- private Set<XModifiedListener> modifiedListeners = new LinkedHashSet<XModifiedListener>();
+ private final Set<XModifiedListener> modifiedListeners = new LinkedHashSet<XModifiedListener>();
private MouseListener mouseLabelListener;
/**
@@ -367,6 +375,7 @@ public abstract class XWidget {
*/
public abstract String getReportData();
+ @Override
public String toString() {
return toReport();
}
diff --git a/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphTable.java b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphTable.java
index 24e2bcb16b0..1aff3d18844 100644
--- a/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphTable.java
+++ b/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/xbargraph/XBarGraphTable.java
@@ -13,6 +13,7 @@ import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
@@ -32,15 +33,18 @@ public class XBarGraphTable extends XWidget {
private final String percentHeader;
private final Map<String, Integer> itemToValueMap;
private Table table;
+ private final String valuePostFix;
- /**
- * @param label
- */
public XBarGraphTable(String label, String itemHeader, String percentHeader, Map<String, Integer> itemToValueMap) {
+ this(label, itemHeader, percentHeader, itemToValueMap, "%");
+ }
+
+ public XBarGraphTable(String label, String itemHeader, String percentHeader, Map<String, Integer> itemToValueMap, String valuePostFix) {
super(label);
this.itemHeader = itemHeader;
this.percentHeader = percentHeader;
this.itemToValueMap = itemToValueMap;
+ this.valuePostFix = valuePostFix;
}
/* (non-Javadoc)
@@ -54,12 +58,15 @@ public class XBarGraphTable extends XWidget {
table = new Table(parent, SWT.BORDER);
table.setHeaderVisible(true);
table.setLinesVisible(true);
+ if (isFillHorizontally()) {
+ table.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ }
TableColumn column1 = new TableColumn(table, SWT.NONE);
column1.setText(itemHeader);
- column1.setWidth(100);
+ column1.setWidth(300);
final TableColumn column2 = new TableColumn(table, SWT.NONE);
column2.setText(percentHeader);
- column2.setWidth(200);
+ column2.setWidth(500);
for (String itemName : itemToValueMap.keySet()) {
TableItem item = new TableItem(table, SWT.NONE);
item.setText(itemName);
@@ -81,14 +88,19 @@ public class XBarGraphTable extends XWidget {
int percent = percents[index];
Color foreground = gc.getForeground();
Color background = gc.getBackground();
- gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
- gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
+ if (valuePostFix.equals("%") && percent == 100) {
+ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN));
+ gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GREEN));
+ } else {
+ gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
+ gc.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_YELLOW));
+ }
int width = (column2.getWidth() - 1) * percent / 100;
gc.fillGradientRectangle(event.x, event.y, width, event.height, true);
Rectangle rect2 = new Rectangle(event.x, event.y, width - 1, event.height - 1);
gc.drawRectangle(rect2);
gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_LIST_FOREGROUND));
- String text = percent + "%";
+ String text = percent + valuePostFix;
Point size = event.gc.textExtent(text);
int offset = Math.max(0, (event.height - size.y) / 2);
gc.drawText(text, event.x + 2, event.y + offset, true);
@@ -97,7 +109,6 @@ public class XBarGraphTable extends XWidget {
}
}
});
-
}
/* (non-Javadoc)

Back to the top