Java tutorial
/******************************************************************************* * Copyright (c) 2004, 2007 Boeing. * 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: * Boeing - initial API and implementation *******************************************************************************/ package org.eclipse.osee.ote.ui.define.viewers.data; import java.util.Date; import java.util.List; import java.util.logging.Level; import org.eclipse.jface.viewers.DecorationOverlayIcon; import org.eclipse.jface.viewers.IDecoration; import org.eclipse.nebula.widgets.xviewer.XViewer; import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; import org.eclipse.osee.framework.core.exception.ArtifactDoesNotExist; import org.eclipse.osee.framework.core.model.type.AttributeType; import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.logging.OseeLog; import org.eclipse.osee.framework.skynet.core.artifact.Artifact; import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager; import org.eclipse.osee.framework.skynet.core.attribute.DateAttribute; import org.eclipse.osee.framework.skynet.core.event.OseeEventManager; import org.eclipse.osee.framework.skynet.core.event.filter.IEventFilter; import org.eclipse.osee.framework.skynet.core.event.listener.IArtifactEventListener; import org.eclipse.osee.framework.skynet.core.event.model.ArtifactEvent; import org.eclipse.osee.framework.skynet.core.event.model.Sender; import org.eclipse.osee.framework.ui.skynet.ArtifactImageManager; import org.eclipse.osee.framework.ui.swt.Displays; import org.eclipse.osee.framework.ui.swt.ImageManager; import org.eclipse.osee.framework.ui.swt.OverlayImage; import org.eclipse.osee.framework.ui.swt.OverlayImage.Location; import org.eclipse.osee.ote.define.AUTOGEN.OteAttributeTypes; import org.eclipse.osee.ote.define.artifacts.ArtifactTestRunOperator; import org.eclipse.osee.ote.ui.define.OteDefineImage; import org.eclipse.osee.ote.ui.define.OteUiDefinePlugin; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.TreeColumn; /** * @author Roberto E. Escobar */ public class ArtifactItem extends DataItem implements IXViewerItem, IArtifactEventListener { private static Image FROM_LOCAL_WS_COMMIT_ALLOWED_IMAGE = null; private static Image FROM_DATABASE_IMAGE = null; private static Image FROM_LOCAL_WS_COMMIT_NOT_ALLOWED_IMAGE = null; private static Image INVALID_SCRIPT_IMAGE = null; private static boolean isFullDescriptionMode = true; private final XViewer xViewer; private Artifact artifact; private ArtifactTestRunOperator operator; private String key; public ArtifactItem(XViewer xViewer, Artifact artifact, DataItem parent) throws OseeArgumentException { super(parent); this.xViewer = xViewer; setArtifact(artifact); OseeEventManager.addListener(this); } @Override public Artifact getData() { return artifact; } @Override public void dispose() { OseeEventManager.removeListener(this); super.dispose(); } private void setArtifact(Artifact artifact) throws OseeArgumentException { this.artifact = artifact; this.operator = new ArtifactTestRunOperator(artifact); try { this.key = String.format("%s:%s:%s", getOperator().getChecksum(), getOperator().isFromLocalWorkspace(), getOperator().hasNotBeenCommitted()); } catch (Exception ex) { this.key = ""; } } public XViewer getXViewer() { return xViewer; } public ArtifactTestRunOperator getOperator() { return operator; } @Override public String getLabel(int index) { String toReturn = ""; Artifact artifact = getData(); try { if (artifact != null && artifact.isDeleted() != true) { if (index <= xViewer.getTree().getColumns().length - 1) { TreeColumn treeCol = xViewer.getTree().getColumns()[index]; String colName = treeCol.getText(); if (colName.equals("GUID")) { toReturn = artifact.getGuid(); } else if (colName.equals("Artifact_Type")) { toReturn = artifact.getArtifactTypeName(); if (getOperator().isFromLocalWorkspace()) { toReturn += " (Local)"; } } else if (colName.equals("Status")) { try { toReturn = getOperator().getTestResultStatus(); } catch (Exception ex) { OseeLog.log(OteUiDefinePlugin.class, Level.SEVERE, ex); toReturn = ex.getLocalizedMessage(); } } else if (colName.equals("Disposition")) { //Special case for the Disposition Artifact String name = artifact.getSoleAttributeValueAsString(CoreAttributeTypes.Name, ""); if (name != "") { try { Artifact dispoArtifact = ArtifactQuery.getArtifactFromTypeAndName( CoreArtifactTypes.TestRunDisposition, name, artifact.getBranch()); if (dispoArtifact != null) { return dispoArtifact .getSoleAttributeValueAsString(OteAttributeTypes.TestDisposition, ""); } } catch (ArtifactDoesNotExist ex) { //ignore if not defined } } return ""; } else { AttributeType attributeType = AttributeTypeManager.getType(colName); if (artifact.isAttributeTypeValid(attributeType)) { if (AttributeTypeManager.isBaseTypeCompatible(DateAttribute.class, attributeType)) { Date date = null; try { date = artifact.getSoleAttributeValue(attributeType); } catch (Exception ex) { // Do Nothing; } if (date != null) { toReturn = new DateAttribute().MMDDYYHHMM.format(date); } else { toReturn = "NOT SET"; } } else { toReturn = artifact.getAttributesToString(attributeType); if (colName.equals("Name")) { toReturn = getArtifactName(toReturn); } } } } } } } catch (OseeCoreException ex) { OseeLog.log(OteUiDefinePlugin.class, Level.SEVERE, ex); toReturn = ex.getLocalizedMessage(); } return toReturn; } private String getArtifactName(String rawName) throws OseeCoreException { String name = rawName; if (isFullDescriptionModeEnabled() != true) { String[] qualifiers = rawName.split("\\."); name = qualifiers[qualifiers.length - 1]; } return String.format("%s%s [%s]", getOperator().isFromLocalWorkspace() ? "> " : "", name, getOperator().getChecksum()); } @Override public Image getImage() { Image toReturn = null; try { Artifact artifact = getData(); if (artifact != null && artifact.isDeleted() != true) { if (areImagesInitialized() != true) { initializeImages(); } ArtifactTestRunOperator operator = getOperator(); if (operator.isFromLocalWorkspace() == true) { if (operator.isCommitAllowed() == true) { toReturn = FROM_LOCAL_WS_COMMIT_ALLOWED_IMAGE; } else { if (operator.isScriptRevisionValid() != true) { toReturn = INVALID_SCRIPT_IMAGE; } else { toReturn = FROM_LOCAL_WS_COMMIT_NOT_ALLOWED_IMAGE; } } } else { toReturn = FROM_DATABASE_IMAGE; } } } catch (Exception ex) { OseeLog.log(OteUiDefinePlugin.class, Level.SEVERE, ex); } return toReturn; } private boolean areImagesInitialized() { return FROM_LOCAL_WS_COMMIT_ALLOWED_IMAGE != null && FROM_DATABASE_IMAGE != null && FROM_LOCAL_WS_COMMIT_NOT_ALLOWED_IMAGE != null; } private void initializeImages() { Artifact artifact = getData(); Image defaultImage = ArtifactImageManager.getImage(artifact); DecorationOverlayIcon overlay = null; if (FROM_LOCAL_WS_COMMIT_ALLOWED_IMAGE == null) { OverlayImage overlayImage = new OverlayImage(defaultImage, ImageManager.getImageDescriptor(OteDefineImage.ADDITION), Location.BOT_RIGHT); FROM_LOCAL_WS_COMMIT_ALLOWED_IMAGE = overlayImage.createImage(); } if (FROM_LOCAL_WS_COMMIT_NOT_ALLOWED_IMAGE == null) { overlay = new DecorationOverlayIcon(defaultImage, ImageManager.getImageDescriptor(OteDefineImage.CONFAUTO_OV), IDecoration.BOTTOM_RIGHT); FROM_LOCAL_WS_COMMIT_NOT_ALLOWED_IMAGE = overlay.createImage(); } if (FROM_DATABASE_IMAGE == null) { overlay = new DecorationOverlayIcon(defaultImage, ImageManager.getImageDescriptor(OteDefineImage.VERSION_CONTROLLED), IDecoration.BOTTOM_RIGHT); FROM_DATABASE_IMAGE = overlay.createImage(); } if (INVALID_SCRIPT_IMAGE == null) { overlay = new DecorationOverlayIcon(defaultImage, ImageManager.getImageDescriptor(OteDefineImage.OBSTRUCTED), IDecoration.BOTTOM_RIGHT); INVALID_SCRIPT_IMAGE = overlay.createImage(); } } @Override public Object getKey() { return key; } public static void setFullDescriptionModeEnabled(boolean isEnabled) { ArtifactItem.isFullDescriptionMode = isEnabled; } public static boolean isFullDescriptionModeEnabled() { return ArtifactItem.isFullDescriptionMode; } // @Override // public void handleTransactionEvent(Sender sender, TransactionEvent transData) { // if (artifact.isDeleted()) { // return; // } // //// transData.getTransactions() // TransactionChange change = null; // change. // if (transData.isDeleted(artifact)) { // Displays.ensureInDisplayThread(new Runnable() { // @Override // public void run() { // if (!xViewer.getTree().isDisposed()) { // xViewer.remove(this); // } // dispose(); // } // }); // return; // } // if (transData.isRelAddedChangedDeleted(artifact) || transData.isChanged(artifact)) { // Displays.ensureInDisplayThread(new Runnable() { // @Override // public void run() { // if (!xViewer.getTree().isDisposed()) { // xViewer.remove(this); // } else { // xViewer.update(this, null); // } // } // }); // } // } @Override public List<? extends IEventFilter> getEventFilters() { return null; } @Override public void handleArtifactEvent(ArtifactEvent artifactEvent, Sender sender) { if (artifact.isDeleted()) { return; } if (artifactEvent.isDeletedPurged(artifact)) { Displays.ensureInDisplayThread(new Runnable() { @Override public void run() { if (!xViewer.getTree().isDisposed()) { xViewer.remove(this); } dispose(); } }); return; } if (artifactEvent.isRelAddedChangedDeleted(artifact) || artifactEvent.isModified(artifact)) { Displays.ensureInDisplayThread(new Runnable() { @Override public void run() { if (!xViewer.getTree().isDisposed()) { xViewer.remove(this); } else { xViewer.update(this, null); } } }); } } }