//------------------------------------------------------------------------------ // Copyright (c) 2005, 2006 IBM Corporation and others. // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // which accompanies this distribution, and is available at // http://www.eclipse.org/legal/epl-v10.html // // Contributors: // IBM Corporation - initial implementation //------------------------------------------------------------------------------ package org.eclipse.epf.diagram.model.util; import java.util.Iterator; import org.eclipse.epf.library.edit.util.ConstraintManager; import org.eclipse.epf.uma.Activity; import org.eclipse.epf.uma.Constraint; import org.eclipse.epf.uma.SupportingMaterial; import com.ibm.icu.util.StringTokenizer; /** * This class stores diagram publish options and references to user-specified * diagrams to replace the activity diagram, activity detail diagram, or work * product dependency diagram for an activity. * * @author Phong Nguyen Le * @since 1.0 */ public class DiagramInfo { private static final String AD_IMAGE_URI = "ad_image_uri"; //$NON-NLS-1$ private static final String ADD_IMAGE_URI = "add_image_uri"; //$NON-NLS-1$ private static final String WPD_IMAGE_URI = "wpd_image_uri"; //$NON-NLS-1$ private static final String PUBLISH_AD_IMAGE = "publish_ad_image"; //$NON-NLS-1$ private static final String PUBLISH_ADD_IMAGE = "publish_add_image"; //$NON-NLS-1$ private static final String PUBLISH_WPD_IMAGE = "publish_wpd_image"; //$NON-NLS-1$ private static final String DELIMITER = "|"; //$NON-NLS-1$ private Activity activity; private String AD_ImageURI; private String ADD_ImageURI; private String WPD_ImageURI; private boolean publishADImage; private boolean publishADDImage; private boolean publishWPDImage; private Constraint constraint; private SupportingMaterial activityDiagram; private SupportingMaterial activityDetailDiagram; private SupportingMaterial wpdDiagram; /** * Constructs and loads a DiagramInfo instance for a given activity * * @param activity */ public DiagramInfo(Activity activity) { this.activity = activity; refresh(); } private DiagramInfo() { AD_ImageURI = ADD_ImageURI = WPD_ImageURI = ""; //$NON-NLS-1$ } private DiagramInfo load() { DiagramInfo info = new DiagramInfo(); for (StringTokenizer tokens = new StringTokenizer(constraint.getBody(), DELIMITER); tokens.hasMoreTokens();) { String token = tokens.nextToken(); int id = token.indexOf('='); int max = token.length() - 1; if (id != -1 && id < max) { String key = token.substring(0, id); if (key.equalsIgnoreCase(AD_IMAGE_URI)) { info.AD_ImageURI = token.substring(id + 1); } else if (key.equalsIgnoreCase(ADD_IMAGE_URI)) { info.ADD_ImageURI = token.substring(id + 1); } else if (key.equalsIgnoreCase(WPD_IMAGE_URI)) { info.WPD_ImageURI = token.substring(id + 1); } else if (key.equalsIgnoreCase(PUBLISH_AD_IMAGE)) { info.publishADImage = Boolean.valueOf( token.substring(id + 1)).booleanValue(); } else if (key.equalsIgnoreCase(PUBLISH_ADD_IMAGE)) { info.publishADDImage = Boolean.valueOf( token.substring(id + 1)).booleanValue(); } else if (key.equalsIgnoreCase(PUBLISH_WPD_IMAGE)) { info.publishWPDImage = Boolean.valueOf( token.substring(id + 1)).booleanValue(); } } } return info; } private void save() { if (constraint == null) { constraint = ConstraintManager.getConstraint(activity, ConstraintManager.ACITIVY_DIAGRAM, true); } if (activityDiagram != null) { AD_ImageURI = activityDiagram.getGuid(); } if (activityDetailDiagram != null) { ADD_ImageURI = activityDetailDiagram.getGuid(); } if (wpdDiagram != null) { WPD_ImageURI = wpdDiagram.getGuid(); } DiagramInfo info = load(); if (AD_ImageURI != null) { info.AD_ImageURI = AD_ImageURI; } if (ADD_ImageURI != null) { info.ADD_ImageURI = ADD_ImageURI; } if (WPD_ImageURI != null) { info.WPD_ImageURI = WPD_ImageURI; } info.publishADImage = publishADImage; info.publishADDImage = publishADDImage; info.publishWPDImage = publishWPDImage; String str = new StringBuffer(AD_IMAGE_URI).append('=').append( info.AD_ImageURI).append(DELIMITER).append(PUBLISH_AD_IMAGE) .append('=').append(String.valueOf(info.publishADImage)) .append(DELIMITER).append(ADD_IMAGE_URI).append('=').append( String.valueOf(info.ADD_ImageURI)).append(DELIMITER) .append(PUBLISH_ADD_IMAGE).append('=').append( String.valueOf(info.publishADDImage)).append(DELIMITER) .append(WPD_IMAGE_URI).append('=').append( String.valueOf(info.WPD_ImageURI)).append(DELIMITER) .append(PUBLISH_WPD_IMAGE).append('=').append( String.valueOf(info.publishWPDImage)).toString(); constraint.setBody(str); } /** * Refreshes this DiagramInfo object from the model * */ public void refresh() { constraint = ConstraintManager.getConstraint(activity, ConstraintManager.ACITIVY_DIAGRAM, false); if (constraint == null) { return; } DiagramInfo info = load(); AD_ImageURI = info.AD_ImageURI; ADD_ImageURI = info.ADD_ImageURI; WPD_ImageURI = info.WPD_ImageURI; publishADImage = info.publishADImage; publishADDImage = info.publishADDImage; publishWPDImage = info.publishWPDImage; activityDiagram = getSupportingMaterial(AD_ImageURI); activityDetailDiagram = getSupportingMaterial(ADD_ImageURI); wpdDiagram = getSupportingMaterial(WPD_ImageURI); } public String getAD_ImageURI() { return AD_ImageURI; } public String getADD_ImageURI() { return ADD_ImageURI; } public String getWPD_ImageURI() { return WPD_ImageURI; } /** * Gets the option to publish user-specified activity detail diagram * instead. * * @return * @see #getActivityDetailDiagram() */ public boolean canPublishADDImage() { return publishADDImage; } /** * Sets the option to publish user-specified activity detail diagram * instead. * * @param publishADDImage */ public void setPublishADDImage(boolean publishADDImage) { this.publishADDImage = publishADDImage; save(); } /** * Gets the option to publish user-specified activity diagram instead. * * @return * @see #getActivityDiagram() */ public boolean canPublishADImage() { return publishADImage; } /** * Sets the option to publish user-specified image for activity diagram * instead of the activity diagram * * @param publishADImage */ public void setPublishADImage(boolean publishADImage) { this.publishADImage = publishADImage; save(); } /** * Gets the option to publish user-specified work product dependency diagram * instead. * * @return * @see #getWPDDiagram() */ public boolean canPublishWPDImage() { return publishWPDImage; } /** * Sets the option to publish user-specified image for work product * dependency diagram instead of the work product dependency diagram * * @param publishWPDImage */ public void setPublishWPDImage(boolean publishWPDImage) { this.publishWPDImage = publishWPDImage; save(); } public SupportingMaterial getActivityDiagram() { return activityDiagram; } /** * Gets user-specified activity detail diagram. * * @return a {@link SupportingMaterial} with the digram in its main * description */ public SupportingMaterial getActivityDetailDiagram() { return activityDetailDiagram; } /** * Gets user-specified work product dependency diagram. * * @return a {@link SupportingMaterial} with the digram in its main * description */ public SupportingMaterial getWPDDiagram() { return wpdDiagram; } public void setWPDDiagram(SupportingMaterial wpdDiagram) { if (this.wpdDiagram != wpdDiagram) { SupportingMaterial old = this.wpdDiagram; this.wpdDiagram = wpdDiagram; update(old, wpdDiagram); } } public void setActivityDetailDiagram( SupportingMaterial activityDetailDiagram) { if (this.activityDetailDiagram != activityDetailDiagram) { SupportingMaterial old = this.activityDetailDiagram; this.activityDetailDiagram = activityDetailDiagram; update(old, activityDetailDiagram); } } public void setActivityDiagram(SupportingMaterial activityDiagram) { if (this.activityDiagram != activityDiagram) { SupportingMaterial old = this.activityDiagram; this.activityDiagram = activityDiagram; update(old, activityDiagram); } } /** * Gets the SupportingMaterial object for the diagram with the given URI * * @param diagramURI * @return null of the SupportingMaterial object could not be found in the * library */ private SupportingMaterial getSupportingMaterial(String diagramURI) { // diagramURI is the GUID of the supporting material that must be in the // list // of supporting materials of the activity // for (Iterator iter = activity.getSupportingMaterials().iterator(); iter .hasNext();) { SupportingMaterial e = (SupportingMaterial) iter.next(); if (e.getGuid().equals(diagramURI)) { return e; } } return null; } private void update(SupportingMaterial old, SupportingMaterial neu) { if (old != null) { activity.getSupportingMaterials().remove(old); } if (neu != null) { activity.getSupportingMaterials().add(neu); } save(); } /** * Checks if the given supporting material is a user-defined diagram of this * DiagramInfo's activity * * @param sm * @return */ public boolean isDiagram(SupportingMaterial sm) { return sm != null && (sm == activityDiagram || sm == activityDetailDiagram || sm == wpdDiagram); } }