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.xslt.mapper.methoid;
021:
022: import org.netbeans.modules.soa.mapper.basicmapper.util.MapperUtilities;
023: import org.netbeans.modules.soa.mapper.common.IMapperEvent;
024: import org.netbeans.modules.soa.mapper.common.IMapperGroupNode;
025: import org.netbeans.modules.soa.mapper.common.basicmapper.IBasicMapper;
026: import org.netbeans.modules.soa.mapper.common.basicmapper.literal.ILiteralUpdater;
027: import org.netbeans.modules.soa.mapper.common.basicmapper.literal.ILiteralUpdaterFactory;
028: import org.netbeans.modules.soa.mapper.common.basicmapper.methoid.IFieldNode;
029: import org.openide.util.NbBundle;
030:
031: /**
032: * Constructs literal updaters for different literal types.
033: *
034: * @author nk160297
035: */
036: public class LiteralUpdaterFactory implements ILiteralUpdaterFactory {
037:
038: private StringLiteralUpdater mStringUpdater;
039: private NumericLiteralUpdater mNumericUpdater;
040: private XPathLiteralUpdater mXPathUpdater;
041: private IBasicMapper mMapper;
042: private AbstractLiteralUpdater.XPathNodeExpressionUpdater mXPathNodeExpressionUpdater;
043:
044: public LiteralUpdaterFactory(IBasicMapper mapper) {
045: mMapper = mapper;
046: }
047:
048: public ILiteralUpdater getStringUpdater() {
049: if (mStringUpdater == null) {
050: mStringUpdater = new StringLiteralUpdater();
051: mStringUpdater.setXPathProcessor(getExpressionUpdater());
052: }
053: return mStringUpdater;
054: }
055:
056: public ILiteralUpdater getNumericUpdater() {
057: if (mNumericUpdater == null) {
058: mNumericUpdater = new NumericLiteralUpdater();
059: mNumericUpdater.setXPathProcessor(getExpressionUpdater());
060: }
061: return mNumericUpdater;
062: }
063:
064: public ILiteralUpdater getXPathUpdater() {
065: if (mXPathUpdater == null) {
066: mXPathUpdater = new XPathLiteralUpdater();
067: mXPathUpdater.setXPathProcessor(getExpressionUpdater());
068: }
069: return mXPathUpdater;
070: }
071:
072: private AbstractLiteralUpdater.XPathNodeExpressionUpdater getExpressionUpdater() {
073: if (mXPathNodeExpressionUpdater == null) {
074: mXPathNodeExpressionUpdater = new AbstractLiteralUpdater.XPathNodeExpressionUpdater() {
075: public void updateNodeExpression(
076: IFieldNode sourceFieldNode) {
077: IMapperGroupNode groupNode = sourceFieldNode
078: .getGroupNode();
079: mMapper.getMapperViewManager().postMapperEvent(
080: MapperUtilities.getMapperEvent(this ,
081: groupNode,
082: IMapperEvent.REQ_UPDATE_NODE,
083: "LITERAL UPDATED")); // NOI18N
084:
085: }
086: };
087: }
088: return mXPathNodeExpressionUpdater;
089: }
090:
091: /**
092: * Returns the literal updater corresponding to the specified type.
093: */
094: public ILiteralUpdater createLiteralUpdater(String type) {
095: Constants.LiteralType typeObj = Constants.LiteralType
096: .findByName(type);
097: return createLiteralUpdater(typeObj);
098: }
099:
100: public ILiteralUpdater createLiteralUpdater(
101: Constants.LiteralType type) {
102: if (type == null) {
103: return null;
104: }
105: ILiteralUpdater updater = null;
106: switch (type) {
107: case NUMBER_LITERAL_TYPE:
108: updater = getNumericUpdater();
109: break;
110: case STRING_LITERAL_TYPE:
111: updater = getStringUpdater();
112: break;
113: case XPATH_LITERAL_TYPE:
114: updater = getXPathUpdater();
115: break;
116: default:
117: break;
118: }
119: return updater;
120: }
121: }
|