|
What this is
Other links
The source code/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is NetBeans. The Initial Developer of the Original * Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun * Microsystems, Inc. All Rights Reserved. */ package org.netbeans.modules.refactoring.api; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.netbeans.jmi.javamodel.Element; import org.netbeans.jmi.javamodel.EnumConstant; import org.netbeans.jmi.javamodel.Field; import org.netbeans.jmi.javamodel.JavaClass; import org.netbeans.modules.refactoring.NbAbstractRefactoring; import org.openide.util.NbBundle; import org.netbeans.modules.javacore.internalapi.ProgressListener; import org.netbeans.modules.javacore.internalapi.ProgressEvent; /** Encapsulate fields refactoring. This is a composed refactoring (uses instances of {@link org.netbeans.modules.refactoring.api.EncapsulateFieldRefactoring} * to encapsulate several fields at once. * * @author Pavel Flaska */ public class EncapsulateFields extends NbAbstractRefactoring { // represents selected fields in explorer private Element[] selectedObjects; private EncapsulateFieldRefactoring[] refactorings; private ProgressListener listener = new ProgressListener() { public void start(ProgressEvent event) { fireProgressListenerStart(event.getOperationType(),event.getCount()); } public void step(ProgressEvent event) { fireProgressListenerStep(); } public void stop(ProgressEvent event) { fireProgressListenerStop(); } }; /** Creates a new instance of EcapsulateFields. * @param selectedObjects Array of objects (fields) that should be encapsulated. */ public EncapsulateFields(Element[] selectedObjects) { this.selectedObjects = selectedObjects; } public Element[] getFields() { return selectedObjects; } public Problem preCheck() { fireProgressListenerStart(PRE_CHECK, 2); try { Problem result = null; fireProgressListenerStep(); for (int i = 0; i < selectedObjects.length; i++) { Element jmiObject = selectedObjects[i]; if (!(jmiObject instanceof Field) || (jmiObject instanceof EnumConstant)) { if (selectedObjects.length == 1 && selectedObjects[0] instanceof JavaClass) { JavaClass encClass = (JavaClass) selectedObjects[0]; List fields = new ArrayList(); List features = encClass.getFeatures(); for (Iterator it = features.iterator(); it.hasNext(); ) { Object o = it.next(); if ((o instanceof Field) && !(o instanceof EnumConstant)) { fields.add(o); } } if (fields.size() == 0) { // there are no fields in class String pattern = NbBundle.getMessage(EncapsulateFields.class, "ERR_EncapsulateNoFields"); String text = new MessageFormat(pattern).format(new Object[] { encClass.getSimpleName() }); result = createProblem(result, true, text); } else { selectedObjects = (Field[]) fields.toArray(new Field[fields.size()]); } } else { result = createProblem(result, true, NbBundle.getMessage(EncapsulateFields.class, "ERR_EncapsulateWrongType")); } } } return result; } finally { fireProgressListenerStop(); } } public Problem prepare(java.util.Collection elements) { Problem problem = null, lastProblem = null; for (int i = 0; i < refactorings.length; i++) { if (cancelRequest) { return null; } Problem p = refactorings[i].prepare(elements); if (p != null) { if (problem == null) problem = lastProblem = p; else { lastProblem.setNext(p); lastProblem = p; } } } referencesIterator = null; return problem; } public void cancelPrepare() { super.cancelPrepare(); if (refactorings != null) { // if there were initialized refactorings for some fields, // cancel their prepare phase for (int i = 0; i < refactorings.length; i++) { refactorings[i].cancelPrepare(); } } } public Problem checkParameters(EncapsulateFieldInfo[] refactorFields, int methodModifier, int fieldModifier) { return setParameters(true, refactorFields, methodModifier, fieldModifier); } public Problem setParameters(EncapsulateFieldInfo[] refactorFields, int methodModifier, int fieldModifier) { return setParameters(false, refactorFields, methodModifier, fieldModifier); } public void setClassPath() { setClassPath((Element) selectedObjects[0]); } private Problem setParameters(boolean checkOnly, EncapsulateFieldInfo[] refactorFields, int methodModifier, int fieldModifier) { if (!checkOnly) { refactorings = new EncapsulateFieldRefactoring[refactorFields.length]; } Problem problem = null, lastProblem = null; for (int i = 0; i < refactorFields.length; i++) { EncapsulateFieldInfo info = refactorFields[i]; EncapsulateFieldRefactoring ref; ref = new EncapsulateFieldRefactoring(info.getField()); if (!checkOnly) { refactorings[i] = ref; } ref.addProgressListener(listener); Problem p; if (checkOnly) { p = ref.checkParameters(info.getGetterName(), info.getSetterName(), methodModifier, fieldModifier); } else { p = ref.setParameters(info.getGetterName(), info.getSetterName(), methodModifier, fieldModifier); } if (p != null) { if (problem == null) problem = lastProblem = p; else { lastProblem.setNext(p); lastProblem = p; } } } return problem; } //////////////////////////////////////////////////////////////////////////// // INNER CLASSES //////////////////////////////////////////////////////////////////////////// /** * Represents data from the panel. */ public static class EncapsulateFieldInfo { Field field; String getterName; String setterName; public EncapsulateFieldInfo(Field field, String getterName, String setterName) { this.field = field; this.getterName = getterName; this.setterName = setterName; } /** * Getter for property getterName. * * @return Value of property getterName. */ public String getGetterName() { return getterName; } /** * Getter for property setterName. * * @return Value of property setterName. */ public String getSetterName() { return setterName; } /** * Getter for property field. * * @return Value of property field. */ public Field getField() { return field; } } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.