/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Oracle - initial API and implementation from Oracle TopLink ******************************************************************************/ package org.eclipse.persistence.tools.workbench.mappingsplugin.ui.descriptor; import java.util.Iterator; import javax.swing.text.Document; import org.eclipse.persistence.tools.workbench.framework.action.AbstractFrameworkAction; import org.eclipse.persistence.tools.workbench.framework.app.ApplicationNode; import org.eclipse.persistence.tools.workbench.framework.context.WorkbenchContext; import org.eclipse.persistence.tools.workbench.framework.ui.dialog.NewNameDialog; import org.eclipse.persistence.tools.workbench.framework.uitools.RegexpDocument; import org.eclipse.persistence.tools.workbench.mappingsmodel.descriptor.MWDescriptor; import org.eclipse.persistence.tools.workbench.mappingsmodel.meta.MWClass; import org.eclipse.persistence.tools.workbench.mappingsmodel.project.MWProject; import org.eclipse.persistence.tools.workbench.mappingsplugin.ui.project.ProjectNode; import org.eclipse.persistence.tools.workbench.utility.CollectionTools; import org.eclipse.persistence.tools.workbench.utility.NameTools; public class RenamePackageAction extends AbstractFrameworkAction { public RenamePackageAction(WorkbenchContext workbenchContext) { super(workbenchContext); } protected void initialize() { super.initialize(); this.setIcon(EMPTY_ICON); this.initializeTextAndMnemonic("RENAME_PACKAGE_ACTION"); this.initializeToolTipText("RENAME_PACKAGE_ACTION.tooltip"); } protected void execute(ApplicationNode selectedNode) { String packageName = this.promptForPackageName(selectedNode); if (packageName == null) { return; } this.navigatorSelectionModel().pushExpansionState(); for (Iterator stream = CollectionTools.collection(((DescriptorPackageNode) selectedNode).descriptorNodes()).iterator(); stream.hasNext(); ) { this.navigatorSelectionModel().pushExpansionState(); DescriptorNode descriptorNode = (DescriptorNode) stream.next(); MWDescriptor descriptor = descriptorNode.getDescriptor(); MWClass mwClass = descriptor.getMWClass(); mwClass.setName(packageName + "." + mwClass.shortName()); descriptor.setName(packageName + "." + mwClass.shortName()); this.navigatorSelectionModel().popAndRestoreExpansionState(descriptorNode, ((ProjectNode) selectedNode.getProjectRoot()).descriptorPackageNodeNamed(packageName).descendantNodeForValue(descriptor)); } this.navigatorSelectionModel().popAndRestoreExpansionState(selectedNode, ((ProjectNode) selectedNode.getProjectRoot()).descriptorPackageNodeNamed(packageName)); this.navigatorSelectionModel().setSelectedNode(((ProjectNode) selectedNode.getProjectRoot()).descriptorPackageNodeNamed(packageName)); } private String promptForPackageName(ApplicationNode node) { LocalNewNameDialog.LocalBuilder packageNameDialogBuilder = new LocalNewNameDialog.LocalBuilder(); packageNameDialogBuilder.addExistingNames(this.packageNames(node)); packageNameDialogBuilder.setTitle(this.resourceRepository().getString("RENAME_PACKAGE_ACTION_DIALOG.title")); packageNameDialogBuilder.setTextFieldDescription(this.resourceRepository().getString("RENAME_PACKAGE_ACTION_DIALOG.textField")); packageNameDialogBuilder.setOriginalName(node.displayString()); LocalNewNameDialog dialog = (LocalNewNameDialog) packageNameDialogBuilder.buildDialog(this.getWorkbenchContext()); dialog.show(); return dialog.wasConfirmed() ? dialog.getNewName() : null; } private Iterator packageNames(ApplicationNode selectedNode) { return ((MWProject) selectedNode.getProjectRoot().getValue()).packageNames(); } // ********** member class ********** private static class LocalNewNameDialog extends NewNameDialog { LocalNewNameDialog(WorkbenchContext context, Builder builder) { super(context, builder); } // check each package name component for a reserved word protected boolean nameIsIllegal(String name) { String[] segments = name.split("\\."); for (int i = 0; i < segments.length; i++) { if (NameTools.javaReservedWordsContains(segments[i])) { return true; } } return false; } private static class LocalBuilder extends Builder { LocalBuilder() { super(); } protected DocumentFactory buildDefaultDocumentFactory() { return new NewNameDialog.DocumentFactory() { public Document buildDocument() { return RegexpDocument.buildDocument(RegexpDocument.RE_PACKAGE); } }; } protected NewNameDialog buildDialog(WorkbenchContext context, Builder clone) { return new LocalNewNameDialog(context, clone); } } } }