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: package org.netbeans.modules.xslt.tmap.util;
020:
021: import java.io.File;
022: import java.util.List;
023: import java.util.StringTokenizer;
024: import org.netbeans.modules.soa.ui.axinodes.AxiomUtils;
025: import org.netbeans.modules.xml.axi.AXIComponent;
026: import org.netbeans.modules.xml.axi.AXIModel;
027: import org.netbeans.modules.xml.axi.AXIModelFactory;
028: import org.netbeans.modules.xml.schema.model.ReferenceableSchemaComponent;
029: import org.netbeans.modules.xml.wsdl.model.Part;
030: import org.netbeans.modules.xml.xam.dom.NamedComponentReference;
031: import org.netbeans.modules.xslt.tmap.model.api.Operation;
032: import org.netbeans.modules.xslt.tmap.model.api.Service;
033: import org.netbeans.modules.xslt.tmap.model.api.TMapModel;
034: import org.netbeans.modules.xslt.tmap.model.api.Transform;
035: import org.netbeans.modules.xslt.tmap.model.api.TransformMap;
036: import org.netbeans.modules.xslt.tmap.model.api.VariableReference;
037: import org.netbeans.modules.xslt.tmap.model.api.WSDLReference;
038: import org.openide.filesystems.FileObject;
039: import org.openide.filesystems.FileUtil;
040:
041: /**
042: * @author Vitaly Bychkov
043: * @version 1.0
044: */
045: public class TMapUtil {
046:
047: private TMapUtil() {
048: }
049:
050: public static Transform getTransform(TMapModel tMapModel,
051: FileObject xsltFo) {
052: assert tMapModel != null && xsltFo != null;
053: Transform transformOp = null;
054:
055: TransformMap root = tMapModel.getTransformMap();
056: List<Service> services = root == null ? null : root
057: .getServices();
058: if (services != null) {
059: for (Service service : services) {
060: List<Operation> operations = service.getOperations();
061: if (operations == null) {
062: break;
063: }
064: for (Operation oElem : operations) {
065: List<Transform> transforms = oElem.getTransforms();
066: for (Transform tElem : transforms) {
067: if (isEqual(xsltFo, tElem.getFile())) {
068: transformOp = tElem;
069: break;
070: }
071: }
072: if (transformOp != null) {
073: break;
074: }
075: }
076: if (transformOp != null) {
077: break;
078: }
079: }
080: }
081:
082: return transformOp;
083: }
084:
085: public static boolean isEqual(FileObject xsltFo, String filePath) {
086: assert xsltFo != null;
087: if (filePath == null) {
088: return false;
089: }
090:
091: String xsltFoPath = xsltFo.getPath();
092: if (xsltFoPath.equals(filePath)) {
093: return true;
094: }
095:
096: // may be relative ?
097: File rootDir = FileUtil.toFile(xsltFo);
098: File tmpDir = FileUtil.toFile(xsltFo);
099: while ((tmpDir = tmpDir.getParentFile()) != null) {
100: rootDir = tmpDir;
101: }
102:
103: if (filePath != null && filePath.startsWith(rootDir.getPath())) {
104: return false;
105: }
106:
107: String pathSeparator = System.getProperty("path.separator");
108: StringTokenizer tokenizer = new StringTokenizer(filePath,
109: pathSeparator);
110:
111: boolean isEqual = true;
112: isEqual = filePath != null
113: && filePath.equals(xsltFo.getNameExt());
114: // TODO m
115: //// FileObject nextFileParent = xsltFo;
116: //// while (tokenizer.hasMoreElements()) {
117: //// if (nextFileParent == null ||
118: //// !tokenizer.nextToken().equals(nextFileParent.getNameExt()))
119: //// {
120: //// isEqual = false;
121: //// break;
122: //// }
123: //// }
124:
125: return isEqual;
126: }
127:
128: // TODO m
129: public static AXIComponent getSourceComponent(Transform transform) {
130: AXIComponent source = null;
131: // source = getAXIComponent(getSourceType(transform));
132: source = getAXIComponent(getSchemaComponent(transform, true));
133: return source;
134: }
135:
136: // TODO m
137: public static AXIComponent getTargetComponent(Transform transform) {
138: AXIComponent target = null;
139: // target = getAXIComponent(getTargetType(transform));
140: target = getAXIComponent(getSchemaComponent(transform, false));
141: return target;
142: }
143:
144: private static AXIComponent getAXIComponent(
145: ReferenceableSchemaComponent schemaComponent) {
146: if (schemaComponent == null) {
147: return null;
148: }
149: AXIComponent axiComponent = null;
150:
151: AXIModel axiModel = AXIModelFactory.getDefault().getModel(
152: schemaComponent.getModel());
153: if (axiModel != null) {
154: axiComponent = AxiomUtils.findGlobalComponent(axiModel
155: .getRoot(), null, schemaComponent);
156: }
157:
158: return axiComponent;
159: }
160:
161: public static ReferenceableSchemaComponent getSchemaComponent(
162: Transform transform, boolean isInput) {
163: assert transform != null;
164:
165: ReferenceableSchemaComponent schemaComponent = null;
166:
167: VariableReference usedVariable = isInput ? transform
168: .getSource() : transform.getResult();
169:
170: // Message message =
171: // getVariableMessage(usedVariable, transform);
172:
173: if (usedVariable != null) {
174: schemaComponent = getMessageSchemaType(usedVariable);
175: }
176:
177: return schemaComponent;
178: }
179:
180: /**
181: * returns first message part type with partName
182: */
183: private static ReferenceableSchemaComponent getMessageSchemaType(
184: VariableReference usedVariable) {
185: if (usedVariable == null) {
186: return null;
187: }
188:
189: ReferenceableSchemaComponent schemaComponent = null;
190:
191: WSDLReference<Part> partRef = usedVariable.getPart();
192: Part part = partRef == null ? null : partRef.get();
193:
194: NamedComponentReference<? extends ReferenceableSchemaComponent> element = null;
195: if (part != null) {
196: element = part.getElement();
197: if (element == null) {
198: element = part.getType();
199: }
200:
201: schemaComponent = element.get();
202: }
203: return schemaComponent;
204: }
205:
206: }
|