001: /*
002: * The contents of this file are subject to the terms of the Common Development
003: * and Distribution License (the License). You may not use this file except in
004: * compliance with the License.
005: *
006: * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
007: * or http://www.netbeans.org/cddl.txt.
008: *
009: * When distributing Covered Code, include this CDDL Header Notice in each file
010: * and include the License file at http://www.netbeans.org/cddl.txt.
011: * If applicable, add the following below the CDDL Header, with the fields
012: * enclosed by brackets [] replaced by your own identifying information:
013: * "Portions Copyrighted [year] [name of copyright owner]"
014: *
015: * The Original Software is NetBeans. The Initial Developer of the Original
016: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
017: * Microsystems, Inc. All Rights Reserved.
018: */
019:
020: package org.netbeans.modules.bpel.design.model.patterns;
021:
022: import java.util.Collection;
023: import org.netbeans.modules.bpel.design.geometry.FBounds;
024: import org.netbeans.modules.bpel.design.geometry.FDimension;
025: import org.netbeans.modules.bpel.design.layout.LayoutManager;
026: import org.netbeans.modules.bpel.design.model.DiagramModel;
027: import org.netbeans.modules.bpel.design.model.elements.GroupBorder;
028: import org.netbeans.modules.bpel.design.model.elements.PlaceHolderElement;
029: import org.netbeans.modules.bpel.design.model.elements.VisualElement;
030: import org.netbeans.modules.bpel.editors.api.nodes.NodeType;
031: import org.netbeans.modules.bpel.design.selection.PlaceHolder;
032: import org.netbeans.modules.bpel.model.api.Activity;
033: import org.netbeans.modules.bpel.model.api.BpelEntity;
034: import org.netbeans.modules.bpel.model.api.TerminationHandler;
035:
036: public class TerminationHandlerPattern extends CompositePattern {
037:
038: private PlaceHolderElement placeHolder;
039:
040: public TerminationHandlerPattern(DiagramModel model) {
041: super (model);
042: placeHolder = new PlaceHolderElement();
043: }
044:
045: public VisualElement getFirstElement() {
046: Pattern nestedPattern = getNestedPattern();
047:
048: if (nestedPattern == null) {
049: return placeHolder;
050: }
051: return nestedPattern.getFirstElement();
052: }
053:
054: public VisualElement getLastElement() {
055: return null;
056: }
057:
058: public void onAppendPattern(Pattern p) {
059: removeElement(placeHolder);
060: }
061:
062: public void onRemovePattern(Pattern p) {
063: appendElement(placeHolder);
064: }
065:
066: protected void createElementsImpl() {
067: setBorder(new GroupBorder());
068: getBorder().setLabelText(getDefaultName());
069:
070: placeHolder = new PlaceHolderElement();
071:
072: appendElement(placeHolder);
073:
074: BpelEntity a = ((TerminationHandler) getOMReference())
075: .getActivity();
076:
077: if (a != null) {
078: Pattern p = getModel().createPattern(a);
079: p.setParent(this );
080: }
081:
082: }
083:
084: public FBounds layoutPattern(LayoutManager manager) {
085: Collection<Pattern> patterns = super .getNestedPatterns();
086:
087: FBounds s;
088:
089: if (patterns.isEmpty()) {
090: placeHolder.setLocation(0, 0);
091: s = placeHolder.getBounds();
092: } else {
093: Pattern p = getNestedPattern();
094: manager.setPatternPosition(p, 0, 0);
095: s = p.getBounds();
096: }
097:
098: getBorder().setClientRectangle(0, 0, s.width, s.height);
099: return getBorder().getBounds();
100:
101: }
102:
103: public String getDefaultName() {
104: return "Termination Handler"; // NOI18N
105: }
106:
107: public void createPlaceholders(Pattern draggedPattern,
108: Collection<PlaceHolder> placeHolders) {
109: if (!(draggedPattern.getOMReference() instanceof Activity))
110: return;
111:
112: if (placeHolder.getPattern() != null) {
113: placeHolders.add(new InnerPlaceHolder(draggedPattern));
114: }
115: }
116:
117: public NodeType getNodeType() {
118: return NodeType.TERMINATION_HANDLER;
119: }
120:
121: private class InnerPlaceHolder extends PlaceHolder {
122: public InnerPlaceHolder(Pattern draggedPattern) {
123: super (TerminationHandlerPattern.this , draggedPattern,
124: placeHolder.getCenterX(), placeHolder.getCenterY());
125: }
126:
127: public void drop() {
128: Pattern p = getDraggedPattern();
129: ((TerminationHandler) getOMReference())
130: .setActivity((Activity) p.getOMReference());
131: }
132: }
133:
134: }
|