01: /*
02: * The contents of this file are subject to the terms of the Common Development
03: * and Distribution License (the License). You may not use this file except in
04: * compliance with the License.
05: *
06: * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
07: * or http://www.netbeans.org/cddl.txt.
08: *
09: * When distributing Covered Code, include this CDDL Header Notice in each file
10: * and include the License file at http://www.netbeans.org/cddl.txt.
11: * If applicable, add the following below the CDDL Header, with the fields
12: * enclosed by brackets [] replaced by your own identifying information:
13: * "Portions Copyrighted [year] [name of copyright owner]"
14: *
15: * The Original Software is NetBeans. The Initial Developer of the Original
16: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
17: * Microsystems, Inc. All Rights Reserved.
18: */
19:
20: /**
21: *
22: */package org.netbeans.modules.bpel.model.impl.references;
23:
24: import org.netbeans.modules.bpel.model.api.BpelEntity;
25: import org.netbeans.modules.bpel.model.api.references.SchemaReference;
26: import org.netbeans.modules.xml.schema.model.ReferenceableSchemaComponent;
27: import org.netbeans.modules.xml.xam.dom.AbstractDocumentComponent;
28:
29: /**
30: * @author ads
31: *
32: */
33: class SchemaReferenceImpl<T extends ReferenceableSchemaComponent>
34: extends AbstractNamedComponentReference<T> implements
35: SchemaReference<T>, BpelAttributesType {
36:
37: SchemaReferenceImpl(T target, Class<T> type,
38: AbstractDocumentComponent parent,
39: SchemaReferenceBuilder.SchemaResolver resolver) {
40: super (target, type, parent);
41: myResolver = resolver;
42: }
43:
44: SchemaReferenceImpl(Class<T> type,
45: AbstractDocumentComponent parent, String value,
46: SchemaReferenceBuilder.SchemaResolver resolver) {
47: super (type, parent, value);
48: myResolver = resolver;
49: }
50:
51: /* (non-Javadoc)
52: * @see org.netbeans.modules.xml.xam.NamedComponentReference#getEffectiveNamespace()
53: */
54: public String getEffectiveNamespace() {
55: /*
56: * Note : refString is not MAIN data in reference.
57: * Reference could be created by existed element.
58: * In this case namespace should be asked at this element.
59: * Parent element could not have any prefix for this namepace yet.
60: *
61: * Otherwise - element was DEFENITLEY created via
62: * reference. And in this case we can try to ask
63: * namespace via prefix at parent element.
64: */
65: if (getReferenced() == null) {
66: assert refString != null;
67: return ((BpelEntity) getParent()).getNamespaceContext()
68: .getNamespaceURI(getPrefix());
69: } else {
70: return getReferenced().getModel().getSchema()
71: .getTargetNamespace();
72: }
73: }
74:
75: /* (non-Javadoc)
76: * @see org.netbeans.modules.xml.xam.Reference#get()
77: */
78: public T get() {
79: if (getReferenced() == null) {
80: T ret = myResolver.resolve(this );
81: setReferenced(ret);
82: return ret;
83: }
84: return getReferenced();
85: }
86:
87: /* (non-Javadoc)
88: * @see org.netbeans.modules.bpel.model.impl.references.BpelAttributesType#getAttributeType()
89: */
90: public AttrType getAttributeType() {
91: return AttrType.QNAME;
92: }
93:
94: private SchemaReferenceBuilder.SchemaResolver myResolver;
95:
96: }
|