JBoss Tools SVN: r39808 - trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog.
by jbosstools-commits@lists.jboss.org
Author: snjeza
Date: 2012-03-23 18:23:37 -0400 (Fri, 23 Mar 2012)
New Revision: 39808
Modified:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/DownloadRuntimeDialog.java
Log:
JBIDE-11127 After downloading a runtime all other runtimes in the install locations are added
Modified: trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/DownloadRuntimeDialog.java
===================================================================
--- trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/DownloadRuntimeDialog.java 2012-03-23 22:19:10 UTC (rev 39807)
+++ trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/DownloadRuntimeDialog.java 2012-03-23 22:23:37 UTC (rev 39808)
@@ -531,6 +531,16 @@
runtimePath.getServerDefinitions().addAll(serverDefinitions);
RuntimeUIActivator.getDefault().getRuntimePaths().add(runtimePath);
RuntimeUIActivator.getDefault().saveRuntimePaths();
+ if (serverDefinitions.size() == 0) {
+ Display.getDefault().asyncExec(new Runnable() {
+
+ @Override
+ public void run() {
+ MessageDialog.openError(Display.getDefault()
+ .getActiveShell(), "Error", "No runtime/server found...");
+ }
+ });
+ }
if (serverDefinitions.size() > 1) {
Display.getDefault().asyncExec(new Runnable() {
12 years, 3 months
JBoss Tools SVN: r39807 - in trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples: dialog and 1 other directory.
by jbosstools-commits@lists.jboss.org
Author: snjeza
Date: 2012-03-23 18:19:10 -0400 (Fri, 23 Mar 2012)
New Revision: 39807
Removed:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/DescriptionToolTip.java
Modified:
trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/DownloadRuntimeDialog.java
Log:
JBIDE-11127 After downloading a runtime all other runtimes in the install locations are added
Deleted: trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/DescriptionToolTip.java
===================================================================
--- trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/DescriptionToolTip.java 2012-03-23 21:23:48 UTC (rev 39806)
+++ trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/DescriptionToolTip.java 2012-03-23 22:19:10 UTC (rev 39807)
@@ -1,69 +0,0 @@
-/*************************************************************************************
- * Copyright (c) 2008-2011 Red Hat, Inc. and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * JBoss by Red Hat - Initial implementation.
- ************************************************************************************/
-package org.jboss.tools.project.examples;
-
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.window.ToolTip;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Text;
-
-/**
- *
- * @author snjeza
- *
- */
-public class DescriptionToolTip extends ToolTip {
-
- private String description;
-
- public DescriptionToolTip(Control control, String description) {
- super(control);
- this.description = description;
- setHideOnMouseDown(true);
- setPopupDelay(400);
-
- }
-
- @Override
- protected Composite createToolTipContentArea(Event event, Composite parent) {
- // Create the content area
- parent.setLayout(new GridLayout());
- Composite composite = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout();
- layout.marginHeight = 2;
- layout.marginLeft = 2;
- composite.setLayout(layout);
- GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
- gd.widthHint = 300;
- composite.setLayoutData(gd);
- composite.setBackground(parent.getDisplay().getSystemColor(
- SWT.COLOR_INFO_BACKGROUND));
- Text text = new Text(composite,
- SWT.READ_ONLY | SWT.MULTI | SWT.WRAP);
- gd = new GridData(SWT.FILL, SWT.FILL, true, true);
- GC gc = new GC(parent);
- gd.heightHint = Dialog.convertHeightInCharsToPixels(gc
- .getFontMetrics(), (description.length()/40) + 1);
- gc.dispose();
- text.setLayoutData(gd);
- text.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
- text.setText(description);
-
- return composite;
- }
-
-}
Modified: trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/DownloadRuntimeDialog.java
===================================================================
--- trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/DownloadRuntimeDialog.java 2012-03-23 21:23:48 UTC (rev 39806)
+++ trunk/examples/plugins/org.jboss.tools.project.examples/src/org/jboss/tools/project/examples/dialog/DownloadRuntimeDialog.java 2012-03-23 22:19:10 UTC (rev 39807)
@@ -17,9 +17,12 @@
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
+import java.util.Enumeration;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -70,6 +73,7 @@
*/
public class DownloadRuntimeDialog extends Dialog {
+ private static final String SEPARATOR = "/";
private static final String FOLDER_IS_REQUIRED = "This folder is required";
private static final String FOLDER_IS_NOT_WRITABLE = "This folder does not exist or is not writable";
private static final String DELETE_ON_EXIT = "deleteOnExit";
@@ -429,6 +433,16 @@
file.delete();
return Status.CANCEL_STATUS;
}
+ String root = getRoot(file, monitor);
+ if (monitor.isCanceled()) {
+ return Status.CANCEL_STATUS;
+ }
+ if (root != null) {
+ File rootFile = new File(selectedDirectory, root);
+ if (rootFile != null && rootFile.exists()) {
+ selectedDirectory = rootFile.getAbsolutePath();
+ }
+ }
createRuntimes(selectedDirectory, monitor);
} catch (IOException e) {
ProjectExamplesActivator.log(e);
@@ -456,6 +470,46 @@
return Status.OK_STATUS;
}
+ private String getRoot(File file, IProgressMonitor monitor) {
+ ZipFile zipFile = null;
+ String root = null;
+ try {
+ zipFile = new ZipFile(file);
+ Enumeration<? extends ZipEntry> entries = zipFile.entries();
+ while (entries.hasMoreElements()) {
+ if (monitor.isCanceled()) {
+ return null;
+ }
+ ZipEntry entry = (ZipEntry) entries.nextElement();
+ String entryName = entry.getName();
+ if (entryName == null || entryName.isEmpty()
+ || entryName.startsWith(SEPARATOR) || entryName.indexOf(SEPARATOR) == -1) {
+ return null;
+ }
+ String directory = entryName.substring(0, entryName.indexOf(SEPARATOR));
+ if (root == null) {
+ root = directory;
+ continue;
+ }
+ if (!directory.equals(root)) {
+ return null;
+ }
+ }
+ } catch (IOException e) {
+ ProjectExamplesActivator.log(e);
+ return null;
+ } finally {
+ if (zipFile != null) {
+ try {
+ zipFile.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ }
+ return root;
+ }
+
private Shell getActiveShell() {
Display display = Display.getDefault();
if (display != null) {
12 years, 3 months
JBoss Tools SVN: r39806 - trunk/jsf/features/org.jboss.tools.richfaces.feature.
by jbosstools-commits@lists.jboss.org
Author: dgolovin
Date: 2012-03-23 17:23:48 -0400 (Fri, 23 Mar 2012)
New Revision: 39806
Modified:
trunk/jsf/features/org.jboss.tools.richfaces.feature/feature.xml
Log:
https://issues.jboss.org/browse/JBIDE-11382 Validation errors in feature.xml's: illegal attribute 'match'
Inclusion converted to requires
Modified: trunk/jsf/features/org.jboss.tools.richfaces.feature/feature.xml
===================================================================
--- trunk/jsf/features/org.jboss.tools.richfaces.feature/feature.xml 2012-03-23 21:03:33 UTC (rev 39805)
+++ trunk/jsf/features/org.jboss.tools.richfaces.feature/feature.xml 2012-03-23 21:23:48 UTC (rev 39806)
@@ -19,8 +19,6 @@
</license>
- <includes id="org.jboss.tools.jsf.feature" version="3.3.0" match="greaterOrEqual" />
-
<requires>
<import plugin="org.jboss.tools.xulrunner.initializer" version="3.1.0" match="greaterOrEqual"/>
<import feature="org.jboss.tools.common.feature" version="3.3.0" match="greaterOrEqual"/>
@@ -30,6 +28,7 @@
<import feature="org.jboss.tools.common.verification.feature" version="3.3.0" match="greaterOrEqual" />
<import feature="org.jboss.tools.vpe.feature" version="3.3.0" match="greaterOrEqual" />
<import feature="org.jboss.tools.jst.feature" version="3.3.0" match="greaterOrEqual" />
+ <import feature="org.jboss.tools.jsf.feature" version="3.3.0" match="greaterOrEqual" />
</requires>
</feature>
12 years, 3 months
JBoss Tools SVN: r39805 - in trunk/modeshape: plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/attributes and 3 other directories.
by jbosstools-commits@lists.jboss.org
Author: elvisisking
Date: 2012-03-23 17:03:33 -0400 (Fri, 23 Mar 2012)
New Revision: 39805
Modified:
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndEditor.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndFormsEditorPage.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/ChildNodeDefinition.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CndValidator.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CompactNodeTypeDefinition.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NamespaceMapping.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NodeTypeDefinition.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinition.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/attributes/NodeAttributes.java
trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/ChildNodeDefinitionTest.java
trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/CndValidatorTest.java
trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/NamespaceMappingTest.java
trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/NodeTypeDefinitionTest.java
trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinitionTest.java
trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/attributes/NodeAttributesTest.java
trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/attributes/ValueConstraintsTest.java
Log:
JBIDE-10702 Editor for JCR Compact Node Definition (CND) files. CND editor now only shows a save is needed when something has changed in the CND. Added some equals/hashCode methods on business objects and more tests.
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/ChildNodeDefinition.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/ChildNodeDefinition.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/ChildNodeDefinition.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -41,14 +41,28 @@
*/
public static ChildNodeDefinition copy( final ChildNodeDefinition childNodeBeingCopied ) {
final ChildNodeDefinition copy = new ChildNodeDefinition();
- copy.setAutoCreated(childNodeBeingCopied.isAutoCreated());
- copy.setMandatory(childNodeBeingCopied.isMandatory());
- copy.setProtected(childNodeBeingCopied.isProtected());
- copy.setOnParentVersion(childNodeBeingCopied.getOnParentVersion());
- copy.setSameNameSiblings(childNodeBeingCopied.allowsSameNameSiblings());
+
+ // name
copy.setName(childNodeBeingCopied.getName());
- copy.setDefaultPrimaryTypeName(childNodeBeingCopied.getDefaultPrimaryTypeName());
- copy.setRequiredPrimaryTypeNames(childNodeBeingCopied.getRequiredPrimaryTypeNames());
+
+ // attributes
+ copy.attributes.getAutocreated().set(childNodeBeingCopied.attributes.getAutocreated().get());
+ copy.attributes.getMandatory().set(childNodeBeingCopied.attributes.getMandatory().get());
+ copy.attributes.getProtected().set(childNodeBeingCopied.attributes.getProtected().get());
+ copy.attributes.getSameNameSiblings().set(childNodeBeingCopied.attributes.getSameNameSiblings().get());
+ copy.attributes.setOnParentVersion(childNodeBeingCopied.attributes.getOnParentVersion());
+
+ // default type
+ copy.defaultType.set(childNodeBeingCopied.defaultType.get());
+ copy.defaultType.setDefaultType(childNodeBeingCopied.getDefaultPrimaryTypeName());
+
+ // required types
+ copy.requiredTypes.set(childNodeBeingCopied.requiredTypes.get());
+
+ for (final String requiredTypeName : childNodeBeingCopied.getRequiredPrimaryTypeNames()) {
+ copy.addRequiredType(requiredTypeName);
+ }
+
return copy;
}
@@ -739,7 +753,7 @@
*/
@Override
public String toString() {
- return (getClass().getSimpleName() + super.toString());
+ return (getClass().getName() + super.toString());
}
}
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CndValidator.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CndValidator.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CndValidator.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -297,64 +297,6 @@
}
/**
- * @param childNodeDefinition the child node definition whose name is being validated (cannot be <code>null</code>)
- * @param existingChildNodeNames the existing child node names used to check for a duplicate (can be <code>null</code> or empty)
- * @param status the status to add the new status to (cannot be <code>null</code>)
- */
- public static void validateName( final ChildNodeDefinition childNodeDefinition,
- final Collection<QualifiedName> existingChildNodeNames,
- final MultiValidationStatus status ) {
- // ERROR - Empty or invalid child node definition name
- validateQualifiedName(childNodeDefinition.getQualifiedName(), Messages.childDefinitionName, status);
-
- if (!Utils.isEmpty(existingChildNodeNames) && existingChildNodeNames.contains(childNodeDefinition.getQualifiedName())) {
- status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateChildNodeDefinitionName,
- childNodeDefinition.getName())));
- }
- }
-
- /**
- * @param childNodeDefinition the child node definition whose name is being validated (cannot be <code>null</code>)
- * @param existingChildNodeNames the existing child node names used to check for a duplicate (can be <code>null</code> or empty)
- * @return the status (never <code>null</code>)
- */
- public static MultiValidationStatus validateName( final ChildNodeDefinition childNodeDefinition,
- final Collection<QualifiedName> existingChildNodeNames ) {
- final MultiValidationStatus status = new MultiValidationStatus();
- validateName(childNodeDefinition, existingChildNodeNames, status);
- return status;
- }
-
- /**
- * @param propertyDefinition the property definition whose name is being validated (cannot be <code>null</code>)
- * @param existingPropertyNames the existing property names used to check for a duplicate (can be <code>null</code> or empty)
- * @param status the status to add the new status to (cannot be <code>null</code>)
- */
- public static void validateName( final PropertyDefinition propertyDefinition,
- final Collection<QualifiedName> existingPropertyNames,
- final MultiValidationStatus status ) {
- // ERROR - Empty or invalid child node definition name
- validateQualifiedName(propertyDefinition.getQualifiedName(), Messages.propertyDefinitionName, status);
-
- if (!Utils.isEmpty(existingPropertyNames) && existingPropertyNames.contains(propertyDefinition.getQualifiedName())) {
- status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateChildNodeDefinitionName,
- propertyDefinition.getName())));
- }
- }
-
- /**
- * @param propertyDefinition the property definition whose name is being validated (cannot be <code>null</code>)
- * @param existingPropertyNames the existing property names used to check for a duplicate (can be <code>null</code> or empty)
- * @return the status (never <code>null</code>)
- */
- public static MultiValidationStatus validateName( final PropertyDefinition propertyDefinition,
- final Collection<QualifiedName> existingPropertyNames ) {
- final MultiValidationStatus status = new MultiValidationStatus();
- validateName(propertyDefinition, existingPropertyNames, status);
- return status;
- }
-
- /**
* @param childNodeDefinition the child node definition whose default type is being validated (cannot be <code>null</code>)
* @return the status (never <code>null</code>)
*/
@@ -391,6 +333,70 @@
}
/**
+ * @param propertyDefinition the property definition whose default values are being validated (cannot be <code>null</code>)
+ * @return the status (never <code>null</code>)
+ */
+ public static MultiValidationStatus validateDefaultValues( final PropertyDefinition propertyDefinition ) {
+ final MultiValidationStatus status = new MultiValidationStatus();
+ validateDefaultValues(propertyDefinition, status);
+ return status;
+ }
+
+ /**
+ * @param propertyDefinition the property definition whose default values are being validated (cannot be <code>null</code>)
+ * @param status the status to add the new status to (cannot be <code>null</code>)
+ */
+ public static void validateDefaultValues( final PropertyDefinition propertyDefinition,
+ final MultiValidationStatus status ) {
+ Utils.verifyIsNotNull(propertyDefinition, "propertyDefinition"); //$NON-NLS-1$
+ Utils.verifyIsNotNull(status, "status"); //$NON-NLS-1$
+
+ String propertyName = propertyDefinition.getName();
+
+ if (Utils.isEmpty(propertyName)) {
+ propertyName = Messages.missingName;
+ }
+
+ final Collection<String> defaultValues = propertyDefinition.getDefaultValuesAsStrings();
+
+ if (Utils.isEmpty(defaultValues)) {
+ if (propertyDefinition.getState(PropertyDefinition.PropertyName.DEFAULT_VALUES) == Value.IS) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.emptyDefaultValues, propertyName)));
+ }
+ } else {
+ // ERROR - Cannot have multiple default values when the property definition is single-valued
+ if ((defaultValues.size() > 1)
+ && (propertyDefinition.getState(PropertyDefinition.PropertyName.MULTIPLE) == Value.IS_NOT)) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.multipleDefaultValuesForSingleValuedProperty,
+ propertyName)));
+ }
+
+ final Collection<String> values = new ArrayList<String>(defaultValues.size());
+
+ for (final String defaultValue : defaultValues) {
+ // ERROR - Default value is not valid for the property definition type
+ isValid(defaultValue, propertyDefinition.getType(), Messages.defaultValue, status);
+
+ if (!Utils.isEmpty(defaultValue)) {
+ // ERROR - Duplicate default value
+ if (values.contains(defaultValue)) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateDefaultValue, propertyName,
+ defaultValue)));
+ } else {
+ values.add(defaultValue);
+ }
+ }
+ }
+
+ // ERROR - Cannot have explicit default values when default values is marked as a variant
+ if (propertyDefinition.getState(PropertyDefinition.PropertyName.DEFAULT_VALUES) != Value.IS) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.defaultValuesExistButMarkedAsVariant,
+ propertyDefinition)));
+ }
+ }
+ }
+
+ /**
* @param localName the local name being validated (cannot be <code>null</code>)
* @param propertyName the name to use in the validation message (cannot be <code>null</code>)
* @return the status (never <code>null</code>)
@@ -442,6 +448,93 @@
}
/**
+ * @param childNodeDefinition the child node definition whose name is being validated (cannot be <code>null</code>)
+ * @param existingChildNodeNames the existing child node names used to check for a duplicate (can be <code>null</code> or empty)
+ * @return the status (never <code>null</code>)
+ */
+ public static MultiValidationStatus validateName( final ChildNodeDefinition childNodeDefinition,
+ final Collection<QualifiedName> existingChildNodeNames ) {
+ final MultiValidationStatus status = new MultiValidationStatus();
+ validateName(childNodeDefinition, existingChildNodeNames, status);
+ return status;
+ }
+
+ /**
+ * @param childNodeDefinition the child node definition whose name is being validated (cannot be <code>null</code>)
+ * @param existingChildNodeNames the existing child node names used to check for a duplicate (can be <code>null</code> or empty)
+ * @param status the status to add the new status to (cannot be <code>null</code>)
+ */
+ public static void validateName( final ChildNodeDefinition childNodeDefinition,
+ final Collection<QualifiedName> existingChildNodeNames,
+ final MultiValidationStatus status ) {
+ // ERROR - Empty or invalid child node definition name
+ validateQualifiedName(childNodeDefinition.getQualifiedName(), Messages.childDefinitionName, status);
+
+ if (!Utils.isEmpty(existingChildNodeNames) && existingChildNodeNames.contains(childNodeDefinition.getQualifiedName())) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateChildNodeDefinitionName,
+ childNodeDefinition.getName())));
+ }
+ }
+
+ /**
+ * @param nodeTypeDefinition the node type definition whose name is being validated (cannot be <code>null</code>)
+ * @param existingNodeTypeNames the existing node type names used to check for a duplicate (can be <code>null</code> or empty)
+ * @return the status (never <code>null</code>)
+ */
+ public static MultiValidationStatus validateName( final NodeTypeDefinition nodeTypeDefinition,
+ final Collection<QualifiedName> existingNodeTypeNames ) {
+ final MultiValidationStatus status = new MultiValidationStatus();
+ validateName(nodeTypeDefinition, existingNodeTypeNames, status);
+ return status;
+ }
+
+ /**
+ * @param nodeTypeDefinition the node type definition whose name is being validated (cannot be <code>null</code>)
+ * @param existingNodeTypeNames the existing node type names used to check for a duplicate (can be <code>null</code> or empty)
+ * @param status the status to add the new status to (cannot be <code>null</code>)
+ */
+ public static void validateName( final NodeTypeDefinition nodeTypeDefinition,
+ final Collection<QualifiedName> existingNodeTypeNames,
+ final MultiValidationStatus status ) {
+ // ERROR - Empty or invalid node type definition name
+ validateQualifiedName(nodeTypeDefinition.getQualifiedName(), Messages.nodeTypeDefinitionName, status);
+
+ if (!Utils.isEmpty(existingNodeTypeNames) && existingNodeTypeNames.contains(nodeTypeDefinition.getQualifiedName())) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateNodeTypeDefinitionName,
+ nodeTypeDefinition.getName())));
+ }
+ }
+
+ /**
+ * @param propertyDefinition the property definition whose name is being validated (cannot be <code>null</code>)
+ * @param existingPropertyNames the existing property names used to check for a duplicate (can be <code>null</code> or empty)
+ * @return the status (never <code>null</code>)
+ */
+ public static MultiValidationStatus validateName( final PropertyDefinition propertyDefinition,
+ final Collection<QualifiedName> existingPropertyNames ) {
+ final MultiValidationStatus status = new MultiValidationStatus();
+ validateName(propertyDefinition, existingPropertyNames, status);
+ return status;
+ }
+
+ /**
+ * @param propertyDefinition the property definition whose name is being validated (cannot be <code>null</code>)
+ * @param existingPropertyNames the existing property names used to check for a duplicate (can be <code>null</code> or empty)
+ * @param status the status to add the new status to (cannot be <code>null</code>)
+ */
+ public static void validateName( final PropertyDefinition propertyDefinition,
+ final Collection<QualifiedName> existingPropertyNames,
+ final MultiValidationStatus status ) {
+ // ERROR - Empty or invalid child node definition name
+ validateQualifiedName(propertyDefinition.getQualifiedName(), Messages.propertyDefinitionName, status);
+
+ if (!Utils.isEmpty(existingPropertyNames) && existingPropertyNames.contains(propertyDefinition.getQualifiedName())) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicatePropertyDefinitionName,
+ propertyDefinition.getName())));
+ }
+ }
+
+ /**
* @param namespaceMapping the namespace mapping being validated (cannot be <code>null</code>)
* @return the status (never <code>null</code>)
*/
@@ -609,9 +702,11 @@
/**
* @param nodeTypeDefinition the node type definition being validated (cannot be <code>null</code>)
+ * @param existingNodeTypeNames the existing node type names used to check for a duplicate (can be <code>null</code> or empty)
* @return the status (never <code>null</code>)
*/
- public static MultiValidationStatus validateNodeTypeDefinition( final NodeTypeDefinition nodeTypeDefinition ) {
+ public static MultiValidationStatus validateNodeTypeDefinition( final NodeTypeDefinition nodeTypeDefinition,
+ final Collection<QualifiedName> existingNodeTypeNames ) {
Utils.verifyIsNotNull(nodeTypeDefinition, "nodeTypeDefinition"); //$NON-NLS-1$
/**
@@ -637,7 +732,7 @@
{ // name
// ERROR - Empty or invalid node type definition name
- validateLocalName(nodeTypeDefinition.getName(), Messages.nodeTypeDefinitionName, status);
+ validateName(nodeTypeDefinition, existingNodeTypeNames, status);
}
{ // super types
@@ -699,11 +794,13 @@
/**
* @param nodeTypeDefinition the node type definition being validated (cannot be <code>null</code>)
+ * @param existingNodeTypeNames the existing node type names used to check for a duplicate (can be <code>null</code> or empty)
* @param status the status to add the new status to (never <code>null</code>)
*/
public static void validateNodeTypeDefinition( final NodeTypeDefinition nodeTypeDefinition,
+ final Collection<QualifiedName> existingNodeTypeNames,
final MultiValidationStatus status ) {
- final ValidationStatus newStatus = validateNodeTypeDefinition(nodeTypeDefinition);
+ final ValidationStatus newStatus = validateNodeTypeDefinition(nodeTypeDefinition, existingNodeTypeNames);
if (!newStatus.isOk()) {
status.add(newStatus);
@@ -730,7 +827,7 @@
final Collection<String> names = new ArrayList<String>(nodeTypeDefinitions.size());
for (final NodeTypeDefinition nodeTypeDefinition : nodeTypeDefinitions) {
- validateNodeTypeDefinition(nodeTypeDefinition, status);
+ validateNodeTypeDefinition(nodeTypeDefinition, null, status);
{ // ERROR - Duplicate node type definition names
final String name = nodeTypeDefinition.getName();
@@ -1123,70 +1220,6 @@
}
/**
- * @param propertyDefinition the property definition whose default values are being validated (cannot be <code>null</code>)
- * @return the status (never <code>null</code>)
- */
- public static MultiValidationStatus validateDefaultValues( final PropertyDefinition propertyDefinition ) {
- final MultiValidationStatus status = new MultiValidationStatus();
- validateDefaultValues(propertyDefinition, status);
- return status;
- }
-
- /**
- * @param propertyDefinition the property definition whose default values are being validated (cannot be <code>null</code>)
- * @param status the status to add the new status to (cannot be <code>null</code>)
- */
- public static void validateDefaultValues( final PropertyDefinition propertyDefinition,
- final MultiValidationStatus status ) {
- Utils.verifyIsNotNull(propertyDefinition, "propertyDefinition"); //$NON-NLS-1$
- Utils.verifyIsNotNull(status, "status"); //$NON-NLS-1$
-
- String propertyName = propertyDefinition.getName();
-
- if (Utils.isEmpty(propertyName)) {
- propertyName = Messages.missingName;
- }
-
- final Collection<String> defaultValues = propertyDefinition.getDefaultValuesAsStrings();
-
- if (Utils.isEmpty(defaultValues)) {
- if (propertyDefinition.getState(PropertyDefinition.PropertyName.DEFAULT_VALUES) == Value.IS) {
- status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.emptyDefaultValues, propertyName)));
- }
- } else {
- // ERROR - Cannot have multiple default values when the property definition is single-valued
- if ((defaultValues.size() > 1)
- && (propertyDefinition.getState(PropertyDefinition.PropertyName.MULTIPLE) == Value.IS_NOT)) {
- status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.multipleDefaultValuesForSingleValuedProperty,
- propertyName)));
- }
-
- final Collection<String> values = new ArrayList<String>(defaultValues.size());
-
- for (final String defaultValue : defaultValues) {
- // ERROR - Default value is not valid for the property definition type
- isValid(defaultValue, propertyDefinition.getType(), Messages.defaultValue, status);
-
- if (!Utils.isEmpty(defaultValue)) {
- // ERROR - Duplicate default value
- if (values.contains(defaultValue)) {
- status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateDefaultValue, propertyName,
- defaultValue)));
- } else {
- values.add(defaultValue);
- }
- }
- }
-
- // ERROR - Cannot have explicit default values when default values is marked as a variant
- if (propertyDefinition.getState(PropertyDefinition.PropertyName.DEFAULT_VALUES) != Value.IS) {
- status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.defaultValuesExistButMarkedAsVariant,
- propertyDefinition)));
- }
- }
- }
-
- /**
* @param nodeTypeDefinitionName the node type name whose supertypes are being checked (cannot be <code>null</code> or empty)
* @param superTypesState the supertypes property state (cannot be <code>null</code>)
* @param superTypeNames the collection of a node type definition's supertypes to validate (can be <code>null</code> or empty)
@@ -1342,8 +1375,8 @@
if (!Utils.isEmpty(constraint)) {
// ERROR - Duplicate value constraint
if (constraints.contains(constraint)) {
- status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateValueConstraint,
- propertyName, constraint)));
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateValueConstraint, propertyName,
+ constraint)));
} else {
constraints.add(constraint);
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CompactNodeTypeDefinition.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CompactNodeTypeDefinition.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CompactNodeTypeDefinition.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -23,6 +23,28 @@
public class CompactNodeTypeDefinition implements CndElement {
/**
+ * @param cndToCopy the CND being copied (cannot be <code>null</code>)
+ * @return a CND exactly equals to the CND that was copied (never <code>null</code>)
+ */
+ public static CompactNodeTypeDefinition copy( final CompactNodeTypeDefinition cndToCopy ) {
+ Utils.verifyIsNotNull(cndToCopy, "cndToCopy"); //$NON-NLS-1$
+
+ final CompactNodeTypeDefinition copy = new CompactNodeTypeDefinition();
+
+ // namespace mappings
+ for (final NamespaceMapping namespaceMapping : cndToCopy.getNamespaceMappings()) {
+ copy.addNamespaceMapping(NamespaceMapping.copy(namespaceMapping));
+ }
+
+ // node type definitions
+ for (final NodeTypeDefinition nodeTypeDefinition : cndToCopy.getNodeTypeDefinitions()) {
+ copy.addNodeTypeDefinition(NodeTypeDefinition.copy(nodeTypeDefinition));
+ }
+
+ return copy;
+ }
+
+ /**
* The registered property change listeners (never <code>null</code>).
*/
private final CopyOnWriteArrayList<PropertyChangeListener> listeners;
@@ -145,6 +167,44 @@
return wasCleared;
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals( final Object obj ) {
+ if (this == obj) {
+ return true;
+ }
+
+ if ((obj == null) || !getClass().equals(obj.getClass())) {
+ return false;
+ }
+
+ final CompactNodeTypeDefinition that = (CompactNodeTypeDefinition)obj;
+
+ { // compare namespace mappings
+ final List<NamespaceMapping> thisNamespaces = getNamespaceMappings();
+ final List<NamespaceMapping> thatNamespaces = that.getNamespaceMappings();
+
+ if (!Utils.equivalent(thisNamespaces, thatNamespaces)) {
+ return false;
+ }
+ }
+
+ { // compare node type definitions
+ final List<NodeTypeDefinition> thisNodeTypes = getNodeTypeDefinitions();
+ final List<NodeTypeDefinition> thatNodeTypes = that.getNodeTypeDefinitions();
+
+ if (!Utils.equivalent(thisNodeTypes, thatNodeTypes)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
private String getEndNamespaceMappingSectionDelimiter() {
return CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.NAMESPACE_MAPPING_SECTION_END_DELIMITER);
}
@@ -184,6 +244,18 @@
}
/**
+ * {@inheritDoc}
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int result1 = Utils.hashCode(getNamespaceMappings().toArray());
+ final int result2 = Utils.hashCode(getNodeTypeDefinitions().toArray());
+ return Utils.hashCode(result1, result2);
+ }
+
+ /**
* @param property the property that was changed (never <code>null</code>)
* @param oldValue the old value (can be <code>null</code>)
* @param newValue the new value (can be <code>null</code>)
@@ -323,7 +395,7 @@
*/
@Override
public String toString() {
- return (getClass().getSimpleName() + super.toString());
+ return (getClass().getName() + super.toString());
}
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NamespaceMapping.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NamespaceMapping.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NamespaceMapping.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -19,6 +19,14 @@
public class NamespaceMapping implements CndElement, Comparable {
/**
+ * @param namespaceMappingToCopy the namespace mapping being copied (cannot be <code>null</code>)
+ * @return a new namespace mapping exactly equal to the one that was copied (never <code>null</code>)
+ */
+ public static NamespaceMapping copy( NamespaceMapping namespaceMappingToCopy ) {
+ return new NamespaceMapping(namespaceMappingToCopy.getPrefix(), namespaceMappingToCopy.getUri());
+ }
+
+ /**
* The delimeter used to separate the prefix from the URI.
*/
public static final String NOTATION_DELIMITER = "="; //$NON-NLS-1$
@@ -262,7 +270,7 @@
*/
@Override
public String toString() {
- return (getClass().getSimpleName() + super.toString());
+ return (getClass().getName() + super.toString());
}
}
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NodeTypeDefinition.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NodeTypeDefinition.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NodeTypeDefinition.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -44,6 +44,46 @@
public static final String NAME_NOTATION_SUFFIX = "]"; //$NON-NLS-1$
/**
+ * @param nodeTypeToCopy the node type defition being copied (cannot be <code>null</code>)
+ * @return a new node type definition exactly equal to the one copied (never <code>null</code>)
+ */
+ public static NodeTypeDefinition copy( final NodeTypeDefinition nodeTypeToCopy ) {
+ Utils.verifyIsNotNull(nodeTypeToCopy, "nodeTypeToCopy"); //$NON-NLS-1$
+
+ final NodeTypeDefinition copy = new NodeTypeDefinition();
+
+ // name
+ copy.setName(nodeTypeToCopy.getName());
+
+ // attributes
+ copy.attributes.setAbstract(nodeTypeToCopy.attributes.getAbstract().get());
+ copy.attributes.setMixin(nodeTypeToCopy.attributes.getMixin().get());
+ copy.attributes.setOrderable(nodeTypeToCopy.attributes.getOrderable().get());
+ copy.attributes.setQueryable(nodeTypeToCopy.attributes.getQueryable().get());
+ copy.attributes.setPrimaryItem(nodeTypeToCopy.getPrimaryItemName());
+ copy.attributes.getPrimaryItem().set(nodeTypeToCopy.attributes.getPrimaryItem().get());
+
+ // child nodes
+ for (final ChildNodeDefinition childNode : nodeTypeToCopy.getChildNodeDefinitions()) {
+ copy.addChildNodeDefinition(ChildNodeDefinition.copy(childNode));
+ }
+
+ // properties
+ for (final PropertyDefinition property : nodeTypeToCopy.getPropertyDefinitions()) {
+ copy.addPropertyDefinition(PropertyDefinition.copy(property));
+ }
+
+ // supertypes
+ copy.superTypes.set(nodeTypeToCopy.superTypes.get());
+
+ for (final QualifiedName supertype : nodeTypeToCopy.getSupertypes()) {
+ copy.addSuperType(supertype.get());
+ }
+
+ return copy;
+ }
+
+ /**
* The node type attributes (never <code>null</code>).
*/
private final NodeTypeAttributes attributes;
@@ -283,6 +323,62 @@
return thisName.compareTo(thatName);
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals( final Object obj ) {
+ if (this == obj) {
+ return true;
+ }
+
+ if ((obj == null) || !getClass().equals(obj.getClass())) {
+ return false;
+ }
+
+ final NodeTypeDefinition that = (NodeTypeDefinition)obj;
+
+ { // name
+ if (!this.name.equals(that.name)) {
+ return false;
+ }
+ }
+
+ { // attributes
+ if (!this.attributes.equals(that.attributes)) {
+ return false;
+ }
+ }
+
+ { // child nodes
+ final List<ChildNodeDefinition> thisChildNodes = getChildNodeDefinitions();
+ final List<ChildNodeDefinition> thatChildNodes = that.getChildNodeDefinitions();
+
+ if (!Utils.equivalent(thisChildNodes, thatChildNodes)) {
+ return false;
+ }
+ }
+
+ { // properties
+ final List<PropertyDefinition> thisProps = getPropertyDefinitions();
+ final List<PropertyDefinition> thatProps = that.getPropertyDefinitions();
+
+ if (!Utils.equivalent(thisProps, thatProps)) {
+ return false;
+ }
+ }
+
+ { // supertypes
+ if (!this.superTypes.equals(that.superTypes)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
private String getChildNodeDefinitionDelimiter() {
return CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.CHILD_NODE_DEFINITION_DELIMITER);
}
@@ -475,6 +571,20 @@
/**
* {@inheritDoc}
*
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int result1 = Utils.hashCode(this.name, this.attributes, this.superTypes);
+ final int result2 = Utils.hashCode(getChildNodeDefinitions().toArray());
+ final int result3 = Utils.hashCode(getPropertyDefinitions().toArray());
+
+ return Utils.hashCode(result1, result2, result3);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
* @see javax.jcr.nodetype.NodeTypeDefinition#hasOrderableChildNodes()
*/
@Override
@@ -830,7 +940,7 @@
*/
@Override
public String toString() {
- return (getClass().getSimpleName() + super.toString());
+ return (getClass().getName() + super.toString());
}
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinition.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinition.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinition.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -51,18 +51,41 @@
*/
public static final PropertyDefinition copy( final PropertyDefinition propertyBeingCopied ) {
final PropertyDefinition copy = new PropertyDefinition();
+
+ // name
copy.setName(propertyBeingCopied.getName());
- copy.setAutoCreated(propertyBeingCopied.isAutoCreated());
- copy.setAvailableQueryOperators(propertyBeingCopied.getAvailableQueryOperators());
- copy.setDefaultValues(propertyBeingCopied.getDefaultValues());
- copy.setFullTextSearchable(propertyBeingCopied.isFullTextSearchable());
- copy.setMandatory(propertyBeingCopied.isMandatory());
- copy.setMultiple(propertyBeingCopied.isMultiple());
- copy.setOnParentVersion(propertyBeingCopied.getOnParentVersion());
- copy.setProtected(propertyBeingCopied.isProtected());
- copy.setQueryOrderable(propertyBeingCopied.isQueryOrderable());
- copy.setRequiredType(propertyBeingCopied.getRequiredType());
- copy.setValueConstraints(propertyBeingCopied.getValueConstraints());
+
+ // attributes
+ copy.attributes.getAutocreated().set(propertyBeingCopied.attributes.getAutocreated().get());
+ copy.attributes.getMandatory().set(propertyBeingCopied.attributes.getMandatory().get());
+ copy.attributes.getMultiple().set(propertyBeingCopied.attributes.getMultiple().get());
+ copy.attributes.getNoFullText().set(propertyBeingCopied.attributes.getNoFullText().get());
+ copy.attributes.getNoQueryOrder().set(propertyBeingCopied.attributes.getNoQueryOrder().get());
+ copy.attributes.getProtected().set(propertyBeingCopied.attributes.getProtected().get());
+ copy.attributes.setOnParentVersion(propertyBeingCopied.attributes.getOnParentVersion());
+ copy.attributes.getQueryOps().set(propertyBeingCopied.attributes.getQueryOps().get());
+
+ for (final QueryOperator operator : propertyBeingCopied.attributes.getQueryOps().getSupportedItems()) {
+ copy.attributes.getQueryOps().add(operator);
+ }
+
+ // default values
+ copy.defaultValues.set(propertyBeingCopied.defaultValues.get());
+
+ for (final String defaultValue : propertyBeingCopied.getDefaultValuesAsStrings()) {
+ copy.defaultValues.add(defaultValue);
+ }
+
+ // required type
+ copy.type = propertyBeingCopied.type;
+
+ // value constraints
+ copy.valueConstraints.set(propertyBeingCopied.valueConstraints.get());
+
+ for (final String constraint : propertyBeingCopied.getValueConstraints()) {
+ copy.valueConstraints.add(constraint);
+ }
+
return copy;
}
@@ -982,7 +1005,7 @@
*/
@Override
public String toString() {
- return (getClass().getSimpleName() + super.toString());
+ return (getClass().getName() + super.toString());
}
}
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/attributes/NodeAttributes.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/attributes/NodeAttributes.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/attributes/NodeAttributes.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -18,20 +18,6 @@
*/
public class NodeAttributes implements CndElement {
- /**
- * @param attributesToCopy the attributes being copied (cannot be <code>null</code>)
- * @return the copy (never <code>null</code>)
- */
- public static NodeAttributes copy( NodeAttributes attributesToCopy ) {
- NodeAttributes copy = new NodeAttributes();
- copy.autocreated.set(attributesToCopy.getAutocreated().get());
- copy.mandatory.set(attributesToCopy.getMandatory().get());
- copy.notDeletable.set(attributesToCopy.getProtected().get());
- copy.opv = attributesToCopy.getOnParentVersion();
- copy.sns.set(attributesToCopy.getSameNameSiblings().get());
- return copy;
- }
-
private final Autocreated autocreated;
private final Mandatory mandatory;
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndEditor.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndEditor.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndEditor.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -191,8 +191,17 @@
// TODO implement createCnd
CndImporter importer = new CndImporter();
List<Throwable> errors = new ArrayList<Throwable>();
- this.cndBeingEdited = importer.importFrom(getFile().getContents(), errors, getFile().getName());
- // TODO implement
+ this.originalCnd = importer.importFrom(getFile().getContents(), errors, getFile().getName());
+
+ // TODO process parse errors here
+
+ // unhook lstening to current CND being edited
+ if (this.cndBeingEdited != null) {
+ this.cndBeingEdited.removeListener(this);
+ }
+
+ // copy over CND
+ this.cndBeingEdited = CompactNodeTypeDefinition.copy(this.originalCnd);
this.cndBeingEdited.addListener(this);
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndFormsEditorPage.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndFormsEditorPage.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndFormsEditorPage.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -10,6 +10,7 @@
import static org.jboss.tools.modeshape.jcr.ui.JcrUiConstants.EditorIds.CND_FORMS_PAGE;
import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -69,6 +70,7 @@
import org.jboss.tools.modeshape.jcr.cnd.ChildNodeDefinition;
import org.jboss.tools.modeshape.jcr.cnd.CndElement.NotationType;
import org.jboss.tools.modeshape.jcr.cnd.CndValidator;
+import org.jboss.tools.modeshape.jcr.cnd.CompactNodeTypeDefinition;
import org.jboss.tools.modeshape.jcr.cnd.NamespaceMapping;
import org.jboss.tools.modeshape.jcr.cnd.NodeTypeDefinition;
import org.jboss.tools.modeshape.jcr.cnd.NodeTypeDefinition.PropertyName;
@@ -86,7 +88,7 @@
/**
* The GUI part of the CND editor.
*/
-class CndFormsEditorPage extends CndEditorPage {
+class CndFormsEditorPage extends CndEditorPage implements PropertyChangeListener {
private IAction addChildNode;
private IAction addNamespace;
@@ -120,6 +122,7 @@
private final ErrorMessage propertiesError;
private Section propertiesSection;
private TableViewer propertyViewer;
+ private NodeTypeDefinition selectedNodeType; // needed for property changes (can be null)
private final ErrorMessage superTypesError;
private TableViewer superTypesViewer;
@@ -1967,21 +1970,34 @@
}
void handleNodeTypeSelected() {
+ final NodeTypeDefinition prevNodeType = this.selectedNodeType;
+ this.selectedNodeType = getSelectedNodeType();
+
+ // unhook property change listening from previously selected node type
+ if (prevNodeType != null) {
+ prevNodeType.removeListener(this);
+ }
+
+ // hook property change listening to new selected node type
+ if (this.selectedNodeType != null) {
+ this.selectedNodeType.addListener(this);
+ }
+
updateEnabledState();
// update section descriptions
- if (getSelectedNodeType() == null) {
+ if (this.selectedNodeType == null) {
this.detailsSection.setDescription(CndMessages.cndEditorDetailsSectionDescription);
this.propertiesSection.setDescription(CndMessages.cndEditorChildNodeSectionDescription);
this.childNodeSection.setDescription(CndMessages.cndEditorPropertySectionDescription);
} else {
- String name = getSelectedNodeType().getName();
+ String name = this.selectedNodeType.getName();
if (Utils.isEmpty(name)) {
name = Messages.missingName;
}
- this.nameEditor.setNameBeingEdited(getSelectedNodeType().getQualifiedName());
+ this.nameEditor.setNameBeingEdited(this.selectedNodeType.getQualifiedName());
this.detailsSection.setDescription(NLS.bind(CndMessages.cndEditorChildNodeSectionDescriptionWithNodeTypeName, name));
this.propertiesSection.setDescription(NLS.bind(CndMessages.cndEditorChildNodeSectionDescriptionWithNodeTypeName, name));
this.childNodeSection.setDescription(NLS.bind(CndMessages.cndEditorPropertySectionDescriptionWithNodeTypeName, name));
@@ -2026,6 +2042,7 @@
this.childNodeViewer.refresh();
} else if (NodeTypeDefinition.PropertyName.NAME.toString().equals(propName)) {
validateName();
+ this.nodeTypeViewer.refresh(source);
} else if (NodeTypeDefinition.PropertyName.PROPERTY_DEFINITIONS.toString().equals(propName)) {
validateProperties();
this.propertyViewer.refresh();
@@ -2033,12 +2050,17 @@
validateSuperTypes();
this.superTypesViewer.refresh();
}
+
+ // tell editor about node type definition change
+ getCndEditor().refreshDirtyState();
} else if (source instanceof NamespaceMapping) {
this.namespaceViewer.refresh(source);
- } else if (source instanceof PropertyDefinition) {
- this.propertyViewer.refresh(source);
- } else if (source instanceof ChildNodeDefinition) {
- this.childNodeViewer.refresh(source);
+ } else if (source instanceof CompactNodeTypeDefinition) {
+ if (CompactNodeTypeDefinition.PropertyName.NAMESPACE_MAPPINGS.toString().equals(propName)) {
+ this.namespaceViewer.refresh();
+ } else if (CompactNodeTypeDefinition.PropertyName.NODE_TYPE_DEFINITIONS.toString().equals(propName)) {
+ this.nodeTypeViewer.refresh();
+ }
}
}
@@ -2093,6 +2115,16 @@
}
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+ */
+ @Override
+ public void propertyChange( final PropertyChangeEvent e ) {
+ handlePropertyChanged(e);
+ }
+
private void refreshAttributeControls() {
boolean notConcrete = false;
boolean mixin = false;
Modified: trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/ChildNodeDefinitionTest.java
===================================================================
--- trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/ChildNodeDefinitionTest.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/ChildNodeDefinitionTest.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -450,40 +450,49 @@
}
@Test
- public void copiesShouldBeEqual() {
- ChildNodeDefinition that = ChildNodeDefinition.copy(this.childNodeDefinition);
- assertEquals(this.childNodeDefinition, that);
+ public void copiesShouldBeEqualAndHaveSameHashCode() {
+ ChildNodeDefinition thatChildNodeDefinition = ChildNodeDefinition.copy(this.childNodeDefinition);
+ assertEquals(this.childNodeDefinition, thatChildNodeDefinition);
+ assertEquals(this.childNodeDefinition.hashCode(), thatChildNodeDefinition.hashCode());
this.childNodeDefinition.setName(Constants.QUALIFIED_NAME1.get());
- that = ChildNodeDefinition.copy(this.childNodeDefinition);
- assertEquals(this.childNodeDefinition, that);
+ thatChildNodeDefinition = ChildNodeDefinition.copy(this.childNodeDefinition);
+ assertEquals(this.childNodeDefinition, thatChildNodeDefinition);
+ assertEquals(this.childNodeDefinition.hashCode(), thatChildNodeDefinition.hashCode());
this.childNodeDefinition.setDefaultPrimaryTypeName(Constants.DEFAULT_TYPE);
- that = ChildNodeDefinition.copy(this.childNodeDefinition);
- assertEquals(this.childNodeDefinition, that);
+ thatChildNodeDefinition = ChildNodeDefinition.copy(this.childNodeDefinition);
+ assertEquals(this.childNodeDefinition, thatChildNodeDefinition);
+ assertEquals(this.childNodeDefinition.hashCode(), thatChildNodeDefinition.hashCode());
this.childNodeDefinition.setAutoCreated(!this.childNodeDefinition.isAutoCreated());
- that = ChildNodeDefinition.copy(this.childNodeDefinition);
- assertEquals(this.childNodeDefinition, that);
+ thatChildNodeDefinition = ChildNodeDefinition.copy(this.childNodeDefinition);
+ assertEquals(this.childNodeDefinition, thatChildNodeDefinition);
+ assertEquals(this.childNodeDefinition.hashCode(), thatChildNodeDefinition.hashCode());
this.childNodeDefinition.setMandatory(!this.childNodeDefinition.isMandatory());
- that = ChildNodeDefinition.copy(this.childNodeDefinition);
- assertEquals(this.childNodeDefinition, that);
+ thatChildNodeDefinition = ChildNodeDefinition.copy(this.childNodeDefinition);
+ assertEquals(this.childNodeDefinition, thatChildNodeDefinition);
+ assertEquals(this.childNodeDefinition.hashCode(), thatChildNodeDefinition.hashCode());
this.childNodeDefinition.setProtected(!this.childNodeDefinition.isProtected());
- that = ChildNodeDefinition.copy(this.childNodeDefinition);
- assertEquals(this.childNodeDefinition, that);
+ thatChildNodeDefinition = ChildNodeDefinition.copy(this.childNodeDefinition);
+ assertEquals(this.childNodeDefinition, thatChildNodeDefinition);
+ assertEquals(this.childNodeDefinition.hashCode(), thatChildNodeDefinition.hashCode());
this.childNodeDefinition.setSameNameSiblings(!this.childNodeDefinition.allowsSameNameSiblings());
- that = ChildNodeDefinition.copy(this.childNodeDefinition);
- assertEquals(this.childNodeDefinition, that);
+ thatChildNodeDefinition = ChildNodeDefinition.copy(this.childNodeDefinition);
+ assertEquals(this.childNodeDefinition, thatChildNodeDefinition);
+ assertEquals(this.childNodeDefinition.hashCode(), thatChildNodeDefinition.hashCode());
this.childNodeDefinition.setOnParentVersion(OnParentVersion.ABORT.asJcrValue());
- that = ChildNodeDefinition.copy(this.childNodeDefinition);
- assertEquals(this.childNodeDefinition, that);
+ thatChildNodeDefinition = ChildNodeDefinition.copy(this.childNodeDefinition);
+ assertEquals(this.childNodeDefinition, thatChildNodeDefinition);
+ assertEquals(this.childNodeDefinition.hashCode(), thatChildNodeDefinition.hashCode());
this.childNodeDefinition.setRequiredPrimaryTypeNames(Constants.Helper.getDefaultQualifiedNamesAsArray());
- that = ChildNodeDefinition.copy(this.childNodeDefinition);
- assertEquals(this.childNodeDefinition, that);
+ thatChildNodeDefinition = ChildNodeDefinition.copy(this.childNodeDefinition);
+ assertEquals(this.childNodeDefinition, thatChildNodeDefinition);
+ assertEquals(this.childNodeDefinition.hashCode(), thatChildNodeDefinition.hashCode());
}
}
Modified: trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/CndValidatorTest.java
===================================================================
--- trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/CndValidatorTest.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/CndValidatorTest.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -147,7 +147,7 @@
this.nodeTypeDefinition.addChildNodeDefinition(this.childNodeDefinition);
this.nodeTypeDefinition.addChildNodeDefinition(child2);
- assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition).isError());
+ assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition, null).isError());
}
@Test
@@ -162,22 +162,22 @@
this.nodeTypeDefinition.addPropertyDefinition(this.propertyDefinition);
this.nodeTypeDefinition.addPropertyDefinition(prop2);
- assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition).isError());
+ assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition, null).isError());
}
@Test
public void nodeTypeDefinitionWithEmptyNameShouldAnError() {
this.nodeTypeDefinition.setName(null);
- assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition).isError());
+ assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition, null).isError());
this.nodeTypeDefinition.setName(Utils.EMPTY_STRING);
- assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition).isError());
+ assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition, null).isError());
}
@Test
public void nodeTypeDefinitionWithInvalidNameShouldBeAnError() {
this.nodeTypeDefinition.setName("invalid/name"); //$NON-NLS-1$
- assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition).isError());
+ assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition, null).isError());
}
@Test
@@ -185,7 +185,7 @@
this.nodeTypeDefinition.setName("nodeTypeName"); //$NON-NLS-1$
this.nodeTypeDefinition.setPrimaryItemName("invalid/name"); //$NON-NLS-1$
- assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition).isError());
+ assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition, null).isError());
}
@Test
@@ -193,13 +193,13 @@
this.nodeTypeDefinition.setName("nodeTypeName"); //$NON-NLS-1$
this.nodeTypeDefinition.addSuperType("invalid/name"); //$NON-NLS-1$
- assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition).isError());
+ assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition, null).isError());
}
@Test
public void nodeTypeDefinitionWithoutPropertiesAndChildNodesShouldBeAWarning() {
this.nodeTypeDefinition.setName("name"); //$NON-NLS-1$
- assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition).isWarning());
+ assertTrue(CndValidator.validateNodeTypeDefinition(this.nodeTypeDefinition, null).isWarning());
}
@Test
Modified: trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/NamespaceMappingTest.java
===================================================================
--- trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/NamespaceMappingTest.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/NamespaceMappingTest.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -196,4 +196,20 @@
assertEquals(namespace1.hashCode(), namespace2.hashCode());
}
+ @Test
+ public void copiesShouldBeEqualAndHaveSameHashCode() {
+ NamespaceMapping thatNamespaceMapping = NamespaceMapping.copy(this.namespaceMapping);
+ assertEquals(this.namespaceMapping, thatNamespaceMapping);
+ assertEquals(this.namespaceMapping.hashCode(), thatNamespaceMapping.hashCode());
+
+ assertTrue(this.namespaceMapping.setPrefix(Constants.NAMESPACE_PREFIX1));
+ thatNamespaceMapping = NamespaceMapping.copy(this.namespaceMapping);
+ assertEquals(this.namespaceMapping, thatNamespaceMapping);
+ assertEquals(this.namespaceMapping.hashCode(), thatNamespaceMapping.hashCode());
+
+ assertTrue(this.namespaceMapping.setUri(Constants.NAMESPACE_URI1));
+ thatNamespaceMapping = NamespaceMapping.copy(this.namespaceMapping);
+ assertEquals(this.namespaceMapping, thatNamespaceMapping);
+ assertEquals(this.namespaceMapping.hashCode(), thatNamespaceMapping.hashCode());
+ }
}
Modified: trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/NodeTypeDefinitionTest.java
===================================================================
--- trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/NodeTypeDefinitionTest.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/NodeTypeDefinitionTest.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -522,4 +522,56 @@
assertEquals(SUPER_TYPE2, superTypeNames[1]);
assertEquals(SUPER_TYPE3, superTypeNames[2]);
}
+
+ @Test
+ public void copiesShouldBeEqualAndHaveSameHashCode() {
+ NodeTypeDefinition thatNodeTypeDefinition = NodeTypeDefinition.copy(this.nodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition, thatNodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition.hashCode(), thatNodeTypeDefinition.hashCode());
+
+ this.nodeTypeDefinition.setName("newName"); //$NON-NLS-1$
+ thatNodeTypeDefinition = NodeTypeDefinition.copy(this.nodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition, thatNodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition.hashCode(), thatNodeTypeDefinition.hashCode());
+
+ this.nodeTypeDefinition.setAbstract(!this.nodeTypeDefinition.isAbstract());
+ thatNodeTypeDefinition = NodeTypeDefinition.copy(this.nodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition, thatNodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition.hashCode(), thatNodeTypeDefinition.hashCode());
+
+ this.nodeTypeDefinition.setMixin(!this.nodeTypeDefinition.isMixin());
+ thatNodeTypeDefinition = NodeTypeDefinition.copy(this.nodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition, thatNodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition.hashCode(), thatNodeTypeDefinition.hashCode());
+
+ this.nodeTypeDefinition.setOrderableChildNodes(!this.nodeTypeDefinition.hasOrderableChildNodes());
+ thatNodeTypeDefinition = NodeTypeDefinition.copy(this.nodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition, thatNodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition.hashCode(), thatNodeTypeDefinition.hashCode());
+
+ this.nodeTypeDefinition.setQueryable(!this.nodeTypeDefinition.isQueryable());
+ thatNodeTypeDefinition = NodeTypeDefinition.copy(this.nodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition, thatNodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition.hashCode(), thatNodeTypeDefinition.hashCode());
+
+ this.nodeTypeDefinition.setPrimaryItemName("newPrimaryItem"); //$NON-NLS-1$
+ thatNodeTypeDefinition = NodeTypeDefinition.copy(this.nodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition, thatNodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition.hashCode(), thatNodeTypeDefinition.hashCode());
+
+ this.nodeTypeDefinition.addSuperType(Constants.QUALIFIED_NAME1.get());
+ thatNodeTypeDefinition = NodeTypeDefinition.copy(this.nodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition, thatNodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition.hashCode(), thatNodeTypeDefinition.hashCode());
+
+ this.nodeTypeDefinition.addChildNodeDefinition(new ChildNodeDefinition());
+ thatNodeTypeDefinition = NodeTypeDefinition.copy(this.nodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition, thatNodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition.hashCode(), thatNodeTypeDefinition.hashCode());
+
+ this.nodeTypeDefinition.addPropertyDefinition(new PropertyDefinition());
+ thatNodeTypeDefinition = NodeTypeDefinition.copy(this.nodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition, thatNodeTypeDefinition);
+ assertEquals(this.nodeTypeDefinition.hashCode(), thatNodeTypeDefinition.hashCode());
+ }
}
Modified: trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinitionTest.java
===================================================================
--- trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinitionTest.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinitionTest.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -39,57 +39,70 @@
}
@Test
- public void copiesShouldBeEqual() {
+ public void copiesShouldBeEqualAndHaveSameHashCode() {
PropertyDefinition thatPropDefn = PropertyDefinition.copy(this.propDefn);
assertEquals(this.propDefn, thatPropDefn);
+ assertEquals(this.propDefn.hashCode(), thatPropDefn.hashCode());
this.propDefn.setAvailableQueryOperators(Constants.Helper.getDefaultQueryOperators());
thatPropDefn = PropertyDefinition.copy(this.propDefn);
assertEquals(this.propDefn, thatPropDefn);
+ assertEquals(this.propDefn.hashCode(), thatPropDefn.hashCode());
this.propDefn.setAutoCreated(!this.propDefn.isAutoCreated());
thatPropDefn = PropertyDefinition.copy(this.propDefn);
assertEquals(this.propDefn, thatPropDefn);
+ assertEquals(this.propDefn.hashCode(), thatPropDefn.hashCode());
this.propDefn.setDefaultValues(Constants.Helper.getDefaultStringValues());
thatPropDefn = PropertyDefinition.copy(this.propDefn);
assertEquals(this.propDefn, thatPropDefn);
+ assertEquals(this.propDefn.hashCode(), thatPropDefn.hashCode());
this.propDefn.setFullTextSearchable(!this.propDefn.isFullTextSearchable());
thatPropDefn = PropertyDefinition.copy(this.propDefn);
assertEquals(this.propDefn, thatPropDefn);
+ assertEquals(this.propDefn.hashCode(), thatPropDefn.hashCode());
this.propDefn.setMandatory(!this.propDefn.isMandatory());
thatPropDefn = PropertyDefinition.copy(this.propDefn);
assertEquals(this.propDefn, thatPropDefn);
+ assertEquals(this.propDefn.hashCode(), thatPropDefn.hashCode());
this.propDefn.setMultiple(!this.propDefn.isMultiple());
thatPropDefn = PropertyDefinition.copy(this.propDefn);
assertEquals(this.propDefn, thatPropDefn);
+ assertEquals(this.propDefn.hashCode(), thatPropDefn.hashCode());
this.propDefn.setName(Constants.QUALIFIED_NAME1.get());
thatPropDefn = PropertyDefinition.copy(this.propDefn);
assertEquals(this.propDefn, thatPropDefn);
+ assertEquals(this.propDefn.hashCode(), thatPropDefn.hashCode());
this.propDefn.setOnParentVersion(OnParentVersion.COMPUTE.asJcrValue());
thatPropDefn = PropertyDefinition.copy(this.propDefn);
assertEquals(this.propDefn, thatPropDefn);
+ assertEquals(this.propDefn.hashCode(), thatPropDefn.hashCode());
this.propDefn.setProtected(!this.propDefn.isProtected());
thatPropDefn = PropertyDefinition.copy(this.propDefn);
assertEquals(this.propDefn, thatPropDefn);
+ assertEquals(this.propDefn.hashCode(), thatPropDefn.hashCode());
this.propDefn.setQueryOrderable(!this.propDefn.isQueryOrderable());
thatPropDefn = PropertyDefinition.copy(this.propDefn);
assertEquals(this.propDefn, thatPropDefn);
+ assertEquals(this.propDefn.hashCode(), thatPropDefn.hashCode());
this.propDefn.setRequiredType(PropertyType.BINARY.asJcrValue());
thatPropDefn = PropertyDefinition.copy(this.propDefn);
assertEquals(this.propDefn, thatPropDefn);
+ assertEquals(this.propDefn.hashCode(), thatPropDefn.hashCode());
this.propDefn.setValueConstraints(Constants.Helper.getDefaultValueConstraints());
thatPropDefn = PropertyDefinition.copy(this.propDefn);
assertEquals(this.propDefn, thatPropDefn);
+ assertEquals(this.propDefn.hashCode(), thatPropDefn.hashCode());
}
@Test
Modified: trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/attributes/NodeAttributesTest.java
===================================================================
--- trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/attributes/NodeAttributesTest.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/attributes/NodeAttributesTest.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -13,7 +13,6 @@
import org.jboss.tools.modeshape.jcr.Utils;
import org.jboss.tools.modeshape.jcr.cnd.CndElement.NotationType;
-import org.jboss.tools.modeshape.jcr.cnd.Constants;
import org.junit.Before;
import org.junit.Test;
@@ -73,32 +72,6 @@
}
@Test
- public void copiesShouldBeEqual() {
- NodeAttributes copy = NodeAttributes.copy(this.attributes);
- assertEquals(this.attributes, copy);
-
- Constants.Helper.changeValue(this.attributes.getAutocreated());
- copy.setAutocreated(this.attributes.getAutocreated().get());
- assertEquals(this.attributes, copy);
-
- Constants.Helper.changeValue(this.attributes.getMandatory());
- copy.setMandatory(this.attributes.getMandatory().get());
- assertEquals(this.attributes, copy);
-
- Constants.Helper.changeValue(this.attributes.getProtected());
- copy.setProtected(this.attributes.getProtected().get());
- assertEquals(this.attributes, copy);
-
- Constants.Helper.changeValue(this.attributes.getSameNameSiblings());
- copy.setSameNameSibling(this.attributes.getSameNameSiblings().get());
- assertEquals(this.attributes, copy);
-
- this.attributes.setOnParentVersion(OnParentVersion.ABORT);
- copy.setOnParentVersion(this.attributes.getOnParentVersion());
- assertEquals(this.attributes, copy);
- }
-
- @Test
public void equalInstancesShouldHaveSameHashCode() {
NodeAttributes second = new NodeAttributes();
assertEquals(this.attributes.hashCode(), second.hashCode());
Modified: trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/attributes/ValueConstraintsTest.java
===================================================================
--- trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/attributes/ValueConstraintsTest.java 2012-03-23 19:35:45 UTC (rev 39804)
+++ trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/attributes/ValueConstraintsTest.java 2012-03-23 21:03:33 UTC (rev 39805)
@@ -72,9 +72,9 @@
@Test
public void verifyMultipleElementsCndNotation() {
// setup
- add(ITEM_ONE);
- add(ITEM_TWO);
- add(ITEM_THREE);
+ add(VALUE_CONSTRAINT1);
+ add(VALUE_CONSTRAINT2);
+ add(VALUE_CONSTRAINT3);
// tests
assertEquals(VALUE_CONSTRAINTS_THREE_ITEM_FORM, this.attribute.toCndNotation(CndElement.NotationType.COMPACT));
@@ -85,7 +85,7 @@
@Test
public void verifyOneElementCndNotation() {
// setup
- add(ITEM_ONE);
+ add(VALUE_CONSTRAINT1);
// tests
assertEquals(VALUE_CONSTRAINTS_ONE_ITEM_FORM, this.attribute.toCndNotation(CndElement.NotationType.COMPACT));
12 years, 3 months
JBoss Tools SVN: r39804 - trunk/build/target-platform.
by jbosstools-commits@lists.jboss.org
Author: nickboldt
Date: 2012-03-23 15:35:45 -0400 (Fri, 23 Mar 2012)
New Revision: 39804
Modified:
trunk/build/target-platform/build.xml
Log:
once again, sf.net changes their download URL pattern...
Modified: trunk/build/target-platform/build.xml
===================================================================
--- trunk/build/target-platform/build.xml 2012-03-23 18:43:08 UTC (rev 39803)
+++ trunk/build/target-platform/build.xml 2012-03-23 19:35:45 UTC (rev 39804)
@@ -100,8 +100,8 @@
<target name="get.ant-contrib" unless="ant-contrib.jar.exists">
- <property name="ANTCONTRIB_MIRROR" value="http://downloads.sourceforge.net/ant-contrib/" />
- <get usetimestamp="true" dest="${COMMON_TOOLS}/ant-contrib-1.0b2-bin.zip" src="${ANTCONTRIB_MIRROR}/ant-contrib-1.0b2-bin.zip" />
+ <property name="ANTCONTRIB_MIRROR" value="http://sourceforge.net/projects/ant-contrib/files/ant-contrib/ant-contrib..." />
+ <get usetimestamp="true" dest="${COMMON_TOOLS}/ant-contrib-1.0b2-bin.zip" src="${ANTCONTRIB_MIRROR}/ant-contrib-1.0b2-bin.zip/download" />
<touch file="${COMMON_TOOLS}/ant-contrib-1.0b2-bin.zip" />
<mkdir dir="${java.io.tmpdir}/ant-contrib-1.0b2-bin.zip_" />
<unzip src="${COMMON_TOOLS}/ant-contrib-1.0b2-bin.zip" dest="${java.io.tmpdir}/ant-contrib-1.0b2-bin.zip_" overwrite="true" />
12 years, 3 months
JBoss Tools SVN: r39803 - trunk/build.
by jbosstools-commits@lists.jboss.org
Author: nickboldt
Date: 2012-03-23 14:43:08 -0400 (Fri, 23 Mar 2012)
New Revision: 39803
Added:
trunk/build/pom-core.xml.DEPRECATED.use.pom.xml.instead.for.Core.builds
Removed:
trunk/build/pom-core.xml
Modified:
trunk/build/pom.xml
Log:
per Max, merge contents of pom-core.xml into pom.xml so it's one less file to maintain/sync; marking pom-core.xml deprecated for now
Deleted: trunk/build/pom-core.xml
===================================================================
--- trunk/build/pom-core.xml 2012-03-23 17:37:58 UTC (rev 39802)
+++ trunk/build/pom-core.xml 2012-03-23 18:43:08 UTC (rev 39803)
@@ -1,675 +0,0 @@
-<project
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
- <modelVersion>4.0.0</modelVersion>
- <groupId>org.jboss.tools</groupId>
- <artifactId>org.jboss.tools.build</artifactId>
- <name>org.jboss.tools.build</name>
- <version>0.0.2</version>
- <packaging>pom</packaging>
-
- <profiles>
- <!-- for bootstrapping the parent and target-platform poms via Mead, we need to be able to fetch from this folder and run
- this profile (excluding all others); currently parent pom includes target-platform build too, so only need to build the parent
-
- mvn clean install -P parent,\!libs,\!tests,\!jmx,\!archives,\!as,\!common,\!jst,\!xulrunner,\!vpe \
- -P \!jsf,\!freemarker,\!hibernatetools,\!portlet,\!struts,\!cdi,\!birt,\!seam,\!examples \
- -P \!maven,\!ws,\!gwt,\!deltacloud,\!runtime,\!usage,\!central,\!aggregate-coverage
-
- -->
- <profile>
- <id>parent</id>
- <activation>
- <activeByDefault>false</activeByDefault>
- </activation>
- <modules>
- <module>parent</module>
- </modules>
- </profile>
-
- <profile>
- <id>libs</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- <property>
- <name>coverage</name>
- </property>
- </activation>
- <modules>
- <module>libs</module>
- </modules>
- </profile>
-
- <profile>
- <id>tests</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- <property>
- <name>as-bootstrap</name>
- </property>
- </activation>
- <modules>
- <module>../tests</module>
- </modules>
- </profile>
-
- <profile>
- <id>jmx</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../jmx</module>
- </modules>
- </profile>
-
- <profile>
- <id>jmx-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../jmx</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>archives</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- <property>
- <name>as-bootstrap</name>
- </property>
- </activation>
- <modules>
- <module>../archives</module>
- </modules>
- </profile>
-
- <profile>
- <id>archives-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../archives</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>as</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- <property>
- <name>as-bootstrap</name>
- </property>
- </activation>
- <modules>
- <module>../as</module>
- </modules>
- </profile>
-
- <profile>
- <id>as-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- <module>../archives</module>
- <module>../jmx</module>
- <module>../as</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>openshift</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- <property>
- <name>openshift-bootstrap</name>
- </property>
- </activation>
- <modules>
- <module>../openshift</module>
- </modules>
- </profile>
-
- <profile>
- <id>openshift-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- <module>../archives</module>
- <module>../jmx</module>
- <module>../as</module>
- <module>../openshift</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>common</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../common</module>
- </modules>
- </profile>
-
- <profile>
- <id>common-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- </modules>
- </profile>
-
- <profile>
- <id>jst</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../jst</module>
- </modules>
- </profile>
-
- <profile>
- <id>jst-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- <module>../jst</module>
- <module>../usage</module>
- </modules>
- </profile>
-
-
- <profile>
- <id>xulrunner</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../xulrunner</module>
- </modules>
- </profile>
-
- <profile>
- <id>xulrunner-bootstrap</id>
- <modules>
- <module>../xulrunner</module>
- </modules>
- </profile>
-
- <profile>
- <id>vpe</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../vpe</module>
- </modules>
- </profile>
-
- <profile>
- <id>vpe-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- <module>../jst</module>
- <module>../xulrunner</module>
- <module>../vpe</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>jsf</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../jsf</module>
- </modules>
- </profile>
-
- <profile>
- <id>jsf-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- <module>../jst</module>
- <module>../xulrunner</module>
- <module>../vpe</module>
- <module>../jsf</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>freemarker</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../freemarker</module>
- </modules>
- </profile>
-
- <profile>
- <id>freemarker-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../freemarker</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>hibernatetools</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../hibernatetools</module>
- </modules>
- </profile>
-
- <profile>
- <id>hibernatetools-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../freemarker</module>
- <module>../hibernatetools</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>portlet</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../portlet</module>
- </modules>
- </profile>
-
- <profile>
- <id>portlet-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../jmx</module>
- <module>../archives</module>
- <module>../as</module>
- <module>../hibernatetools</module>
- <module>../common</module>
- <module>../jst</module>
- <module>../xulrunner</module>
- <module>../vpe</module>
- <module>../jsf</module>
- <module>../usage</module>
- <module>../seam</module>
- <module>../portlet</module>
- </modules>
- </profile>
-
- <profile>
- <id>struts</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../struts</module>
- </modules>
- </profile>
-
- <profile>
- <id>struts-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- <module>../jst</module>
- <module>../xulrunner</module>
- <module>../vpe</module>
- <module>../struts</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>forge</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../forge</module>
- </modules>
- </profile>
-
- <profile>
- <id>forge-bootstrap</id>
- <modules>
- <module>../forge</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>cdi</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../cdi</module>
- </modules>
- </profile>
-
- <profile>
- <id>cdi-tests</id>
- <modules>
- <module>libs</module>
- <module>../cdi/tests</module>
- <module>reports/emma-coverage</module>
- </modules>
- </profile>
-
- <profile>
- <id>cdi-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- <module>../jst</module>
- <module>../cdi</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>birt</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../birt</module>
- </modules>
- </profile>
-
- <profile>
- <id>birt-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../birt</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>seam</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../seam</module>
- </modules>
- </profile>
-
- <profile>
- <id>seam-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../jmx</module>
- <module>../archives</module>
- <module>../as</module>
- <module>../hibernatetools</module>
- <module>../common</module>
- <module>../jst</module>
- <module>../xulrunner</module>
- <module>../vpe</module>
- <module>../jsf</module>
- <module>../seam</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>examples</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../examples</module>
- </modules>
- </profile>
-
- <profile>
- <id>examples-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- <module>../jmx</module>
- <module>../usage</module>
- <module>../runtime</module>
- <module>../examples</module>
- </modules>
- </profile>
-
- <profile>
- <id>maven</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../maven</module>
- </modules>
- </profile>
-
- <profile>
- <id>maven-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../jmx</module>
- <module>../archives</module>
- <module>../as</module>
- <module>../hibernatetools</module>
- <module>../common</module>
- <module>../examples</module>
- <module>../jst</module>
- <module>../xulrunner</module>
- <module>../vpe</module>
- <module>../jsf</module>
- <module>../seam</module>
- <module>../usage</module>
- <module>../cdi</module>
- <module>../maven</module>
- </modules>
- </profile>
-
- <profile>
- <id>ws</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../ws</module>
- </modules>
- </profile>
-
- <profile>
- <id>ws-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- <module>../as</module>
- <module>../ws</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>gwt</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../gwt</module>
- </modules>
- </profile>
-
- <profile>
- <id>deltacloud</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../deltacloud</module>
- </modules>
- </profile>
-
- <profile>
- <id>deltacloud-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../as</module>
- <module>../deltacloud</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>runtime</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../runtime</module>
- </modules>
- </profile>
-
- <profile>
- <id>runtime-bootstrap</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- <module>../jmx</module>
- <module>../archives</module>
- <module>../as</module>
- <module>../hibernatetools</module>
- <module>../jst</module>
- <module>../xulrunner</module>
- <module>../vpe</module>
- <module>../jsf</module>
- <module>../seam</module>
- <module>../usage</module>
- <module>../runtime</module>
- </modules>
- </profile>
-
- <profile>
- <id>richfaces</id>
- <activation>
- <activeByDefault>false</activeByDefault>
- </activation>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- <module>../jst</module>
- <module>../vpe</module>
- <module>../jsf</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>usage</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>central</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../central</module>
- </modules>
- </profile>
-
- <profile>
- <id>central-bootstrap</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- <module>../runtime</module>
- <module>../freemarker</module>
- <module>../hibernatetools</module>
- <module>../usage</module>
- <module>../jst</module>
- <module>../vpe</module>
- <module>../jsf</module>
- <module>../jmx</module>
- <module>../archives</module>
- <module>../as</module>
- <module>../seam</module>
- <module>../portlet</module>
- <module>../examples</module>
- <module>../esb</module>
- <module>../jbpm</module>
- <module>../flow</module>
- <module>../maven</module>
- <module>../central</module>
- </modules>
- </profile>
-
- <profile>
- <id>aggregate-coverage</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- <property>
- <name>coverage</name>
- </property>
- </activation>
- <modules>
- <module>reports/emma-coverage</module>
- </modules>
- </profile>
- </profiles>
-
- <repositories>
- <!-- still needed? JBIDE-10595 vs. JBIDE-10742 -->
- <repository>
- <id>gwt-e37</id>
- <url>http://dl.google.com/eclipse/plugin/3.7/</url>
- <layout>p2</layout>
- <snapshots>
- <enabled>true</enabled>
- </snapshots>
- <releases>
- <enabled>true</enabled>
- </releases>
- </repository>
- <!-- no longer needed (https://issues.jboss.org/browse/JBIDE-9585) <repository>
- <id>egit11</id>
- <url>http://download.jboss.org/jbosstools/updates/requirements/egit/1.1.0.2011...</url>
- <layout>p2</layout>
- <snapshots>
- <enabled>true</enabled>
- </snapshots>
- <releases>
- <enabled>true</enabled>
- </releases>
- </repository> -->
- </repositories>
-</project>
-
Copied: trunk/build/pom-core.xml.DEPRECATED.use.pom.xml.instead.for.Core.builds (from rev 39802, trunk/build/pom-core.xml)
===================================================================
--- trunk/build/pom-core.xml.DEPRECATED.use.pom.xml.instead.for.Core.builds (rev 0)
+++ trunk/build/pom-core.xml.DEPRECATED.use.pom.xml.instead.for.Core.builds 2012-03-23 18:43:08 UTC (rev 39803)
@@ -0,0 +1,674 @@
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.jboss.tools</groupId>
+ <artifactId>org.jboss.tools.build</artifactId>
+ <name>org.jboss.tools.build</name>
+ <version>0.0.2</version>
+ <packaging>pom</packaging>
+
+ <profiles>
+ <!-- for bootstrapping the parent and target-platform poms via Mead, we need to be able to fetch from this folder and run
+ this profile (excluding all others); currently parent pom includes target-platform build too, so only need to build the parent
+
+ mvn clean install -P parent,\!libs,\!tests,\!jmx,\!archives,\!as,\!common,\!jst,\!xulrunner,\!vpe \
+ -P \!jsf,\!freemarker,\!hibernatetools,\!portlet,\!struts,\!cdi,\!birt,\!seam,\!examples \
+ -P \!maven,\!ws,\!gwt,\!deltacloud,\!runtime,\!usage,\!central,\!aggregate-coverage
+
+ -->
+ <profile>
+ <id>parent</id>
+ <activation>
+ <activeByDefault>false</activeByDefault>
+ </activation>
+ <modules>
+ <module>parent</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>libs</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ <property>
+ <name>coverage</name>
+ </property>
+ </activation>
+ <modules>
+ <module>libs</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>tests</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ <property>
+ <name>as-bootstrap</name>
+ </property>
+ </activation>
+ <modules>
+ <module>../tests</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>jmx</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../jmx</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>jmx-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../jmx</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>archives</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ <property>
+ <name>as-bootstrap</name>
+ </property>
+ </activation>
+ <modules>
+ <module>../archives</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>archives-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../archives</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>as</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ <property>
+ <name>as-bootstrap</name>
+ </property>
+ </activation>
+ <modules>
+ <module>../as</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>as-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../common</module>
+ <module>../archives</module>
+ <module>../jmx</module>
+ <module>../as</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>openshift</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ <property>
+ <name>openshift-bootstrap</name>
+ </property>
+ </activation>
+ <modules>
+ <module>../openshift</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>openshift-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../common</module>
+ <module>../archives</module>
+ <module>../jmx</module>
+ <module>../as</module>
+ <module>../openshift</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>common</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../common</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>common-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../common</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>jst</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../jst</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>jst-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../common</module>
+ <module>../jst</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>xulrunner</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../xulrunner</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>xulrunner-bootstrap</id>
+ <modules>
+ <module>../xulrunner</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>vpe</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../vpe</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>vpe-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../common</module>
+ <module>../jst</module>
+ <module>../xulrunner</module>
+ <module>../vpe</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>jsf</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../jsf</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>jsf-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../common</module>
+ <module>../jst</module>
+ <module>../xulrunner</module>
+ <module>../vpe</module>
+ <module>../jsf</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>freemarker</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../freemarker</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>freemarker-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../freemarker</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>hibernatetools</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../hibernatetools</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>hibernatetools-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../freemarker</module>
+ <module>../hibernatetools</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>portlet</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../portlet</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>portlet-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../jmx</module>
+ <module>../archives</module>
+ <module>../as</module>
+ <module>../hibernatetools</module>
+ <module>../common</module>
+ <module>../jst</module>
+ <module>../xulrunner</module>
+ <module>../vpe</module>
+ <module>../jsf</module>
+ <module>../usage</module>
+ <module>../seam</module>
+ <module>../portlet</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>struts</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../struts</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>struts-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../common</module>
+ <module>../jst</module>
+ <module>../xulrunner</module>
+ <module>../vpe</module>
+ <module>../struts</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>forge</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../forge</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>forge-bootstrap</id>
+ <modules>
+ <module>../forge</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>cdi</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../cdi</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>cdi-tests</id>
+ <modules>
+ <module>libs</module>
+ <module>../cdi/tests</module>
+ <module>reports/emma-coverage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>cdi-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../common</module>
+ <module>../jst</module>
+ <module>../cdi</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>birt</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../birt</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>birt-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../birt</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>seam</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../seam</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>seam-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../jmx</module>
+ <module>../archives</module>
+ <module>../as</module>
+ <module>../hibernatetools</module>
+ <module>../common</module>
+ <module>../jst</module>
+ <module>../xulrunner</module>
+ <module>../vpe</module>
+ <module>../jsf</module>
+ <module>../seam</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>examples</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../examples</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>examples-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../common</module>
+ <module>../jmx</module>
+ <module>../usage</module>
+ <module>../runtime</module>
+ <module>../examples</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>maven</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../maven</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>maven-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../jmx</module>
+ <module>../archives</module>
+ <module>../as</module>
+ <module>../hibernatetools</module>
+ <module>../common</module>
+ <module>../examples</module>
+ <module>../jst</module>
+ <module>../xulrunner</module>
+ <module>../vpe</module>
+ <module>../jsf</module>
+ <module>../seam</module>
+ <module>../usage</module>
+ <module>../cdi</module>
+ <module>../maven</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>ws</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../ws</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>ws-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../common</module>
+ <module>../as</module>
+ <module>../ws</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>gwt</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../gwt</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>deltacloud</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../deltacloud</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>deltacloud-bootstrap</id>
+ <modules>
+ <module>../tests</module>
+ <module>../as</module>
+ <module>../deltacloud</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>runtime</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../runtime</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>runtime-bootstrap</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../tests</module>
+ <module>../common</module>
+ <module>../jmx</module>
+ <module>../archives</module>
+ <module>../as</module>
+ <module>../hibernatetools</module>
+ <module>../jst</module>
+ <module>../xulrunner</module>
+ <module>../vpe</module>
+ <module>../jsf</module>
+ <module>../seam</module>
+ <module>../usage</module>
+ <module>../runtime</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>richfaces</id>
+ <activation>
+ <activeByDefault>false</activeByDefault>
+ </activation>
+ <modules>
+ <module>../tests</module>
+ <module>../common</module>
+ <module>../jst</module>
+ <module>../vpe</module>
+ <module>../jsf</module>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>usage</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../usage</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>central</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../central</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>central-bootstrap</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>../tests</module>
+ <module>../common</module>
+ <module>../runtime</module>
+ <module>../freemarker</module>
+ <module>../hibernatetools</module>
+ <module>../usage</module>
+ <module>../jst</module>
+ <module>../vpe</module>
+ <module>../jsf</module>
+ <module>../jmx</module>
+ <module>../archives</module>
+ <module>../as</module>
+ <module>../seam</module>
+ <module>../portlet</module>
+ <module>../examples</module>
+ <module>../esb</module>
+ <module>../jbpm</module>
+ <module>../flow</module>
+ <module>../maven</module>
+ <module>../central</module>
+ </modules>
+ </profile>
+
+ <profile>
+ <id>aggregate-coverage</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ <property>
+ <name>coverage</name>
+ </property>
+ </activation>
+ <modules>
+ <module>reports/emma-coverage</module>
+ </modules>
+ </profile>
+ </profiles>
+
+ <repositories>
+ <!-- still needed? JBIDE-10595 vs. JBIDE-10742 -->
+ <repository>
+ <id>gwt-e37</id>
+ <url>http://dl.google.com/eclipse/plugin/3.7/</url>
+ <layout>p2</layout>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ </repository>
+ <!-- no longer needed (https://issues.jboss.org/browse/JBIDE-9585) <repository>
+ <id>egit11</id>
+ <url>http://download.jboss.org/jbosstools/updates/requirements/egit/1.1.0.2011...</url>
+ <layout>p2</layout>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ <releases>
+ <enabled>true</enabled>
+ </releases>
+ </repository> -->
+ </repositories>
+</project>
+
Modified: trunk/build/pom.xml
===================================================================
--- trunk/build/pom.xml 2012-03-23 17:37:58 UTC (rev 39802)
+++ trunk/build/pom.xml 2012-03-23 18:43:08 UTC (rev 39803)
@@ -13,8 +13,8 @@
this profile (excluding all others); currently parent pom includes target-platform build too, so only need to build the parent
mvn clean install -P parent,\!libs,\!tests,\!jmx,\!archives,\!as,\!common,\!jst,\!xulrunner,\!vpe \
- -P \!jsf,\!freemarker,\!hibernatetools,\!portlet,\!struts,\!smooks,\!cdi,\!birt,\!bpel,\!esb,\!seam,\!examples \
- -P \!maven,\!ws,\!modeshape,\!flow,\!jbpm,\!gwt,\!deltacloud,\!runtime,\!usage,\!central,\!aggregate-coverage
+ -P \!jsf,\!freemarker,\!hibernatetools,\!portlet,\!struts,\!cdi,\!birt,\!seam,\!examples \
+ -P \!maven,\!ws,\!gwt,\!deltacloud,\!runtime,\!usage,\!central,\!aggregate-coverage
-->
<profile>
@@ -337,26 +337,6 @@
</profile>
<profile>
- <id>smooks</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../smooks</module>
- </modules>
- </profile>
-
- <profile>
- <id>smooks-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- <module>../smooks</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
<id>forge</id>
<activation>
<activeByDefault>true</activeByDefault>
@@ -424,45 +404,6 @@
</profile>
<profile>
- <id>bpel</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../bpel</module>
- </modules>
- </profile>
-
- <profile>
- <id>bpel-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../bpel</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>esb</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../esb</module>
- </modules>
- </profile>
-
- <profile>
- <id>esb-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../common</module>
- <module>../esb</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
<id>seam</id>
<activation>
<activeByDefault>true</activeByDefault>
@@ -565,64 +506,6 @@
</profile>
<profile>
- <id>modeshape</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../modeshape</module>
- </modules>
- </profile>
-
- <profile>
- <id>modeshape-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../modeshape</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>flow</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../flow</module>
- </modules>
- </profile>
-
- <profile>
- <id>flow-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../flow</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
- <id>jbpm</id>
- <activation>
- <activeByDefault>true</activeByDefault>
- </activation>
- <modules>
- <module>../jbpm</module>
- </modules>
- </profile>
-
- <profile>
- <id>jbpm-bootstrap</id>
- <modules>
- <module>../tests</module>
- <module>../flow</module>
- <module>../jbpm</module>
- <module>../usage</module>
- </modules>
- </profile>
-
- <profile>
<id>gwt</id>
<activation>
<activeByDefault>true</activeByDefault>
12 years, 3 months
JBoss Tools SVN: r39802 - trunk/common/plugins/org.jboss.tools.common/src/org/jboss/tools/common/util.
by jbosstools-commits@lists.jboss.org
Author: akazakov
Date: 2012-03-23 13:37:58 -0400 (Fri, 23 Mar 2012)
New Revision: 39802
Modified:
trunk/common/plugins/org.jboss.tools.common/src/org/jboss/tools/common/util/EclipseUIUtil.java
Log:
https://issues.jboss.org/browse/JBIDE-11385 Invalid thread access in CDICoreValidator
Modified: trunk/common/plugins/org.jboss.tools.common/src/org/jboss/tools/common/util/EclipseUIUtil.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common/src/org/jboss/tools/common/util/EclipseUIUtil.java 2012-03-23 16:56:24 UTC (rev 39801)
+++ trunk/common/plugins/org.jboss.tools.common/src/org/jboss/tools/common/util/EclipseUIUtil.java 2012-03-23 17:37:58 UTC (rev 39802)
@@ -107,6 +107,9 @@
for (IWorkbenchWindow window : windows) {
final IWorkbenchPage page = window.getActivePage();
if (page != null) {
+ // If this method is invoked in non-UI thread then some editors may throw Invalid Thread Access exception.
+ // We use SafeRunnable as a workaround to avoid crashing.
+ // See https://issues.jboss.org/browse/JBIDE-11385
SafeRunnable sr = new SafeRunnable() {
@Override
public void run() throws Exception {
12 years, 3 months
JBoss Tools SVN: r39801 - in trunk/modeshape: plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/attributes and 4 other directories.
by jbosstools-commits@lists.jboss.org
Author: elvisisking
Date: 2012-03-23 12:56:24 -0400 (Fri, 23 Mar 2012)
New Revision: 39801
Added:
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/PropertyDialog.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/QualifiedNameEditor.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/StringValueEditorDialog.java
Modified:
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/ChildNodeDialog.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndEditor.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndFormsEditorPage.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndMessages.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/NamespaceMappingDialog.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/QualifiedNameDialog.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/cndMessages.properties
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/ChildNodeDefinition.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CndValidator.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CompactNodeTypeDefinition.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NamespaceMapping.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NodeTypeDefinition.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinition.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/attributes/ListAttributeState.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.ui/src/org/jboss/tools/modeshape/ui/UiUtils.java
trunk/modeshape/plugins/org.jboss.tools.modeshape.ui/src/org/jboss/tools/modeshape/ui/actions/DelegateAction.java
trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/CndValidatorTest.java
trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/Constants.java
trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinitionTest.java
Log:
JBIDE-10702 Editor for JCR Compact Node Definition (CND) files. Created a reusable qualified name editor and updated PropertyDialog, ChildNodeDialog, and CndFormsEditorPage to use it. Business objects now also return a QualifiedName type.
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/ChildNodeDefinition.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/ChildNodeDefinition.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/ChildNodeDefinition.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -36,19 +36,19 @@
public static final String NOTATION_PREFIX = "+"; //$NON-NLS-1$
/**
- * @param childNodeToCopy the child node definition being copied (cannot be <code>null</code>)
+ * @param childNodeBeingCopied the child node definition being copied (cannot be <code>null</code>)
* @return the copy (never <code>null</code>)
*/
- public static ChildNodeDefinition copy( ChildNodeDefinition childNodeToCopy ) {
- ChildNodeDefinition copy = new ChildNodeDefinition();
- copy.setAutoCreated(childNodeToCopy.isAutoCreated());
- copy.setMandatory(childNodeToCopy.isMandatory());
- copy.setProtected(childNodeToCopy.isProtected());
- copy.setOnParentVersion(childNodeToCopy.getOnParentVersion());
- copy.setSameNameSiblings(childNodeToCopy.allowsSameNameSiblings());
- copy.setName(childNodeToCopy.getName());
- copy.setDefaultPrimaryTypeName(childNodeToCopy.getDefaultPrimaryTypeName());
- copy.setRequiredPrimaryTypeNames(childNodeToCopy.getRequiredPrimaryTypeNames());
+ public static ChildNodeDefinition copy( final ChildNodeDefinition childNodeBeingCopied ) {
+ final ChildNodeDefinition copy = new ChildNodeDefinition();
+ copy.setAutoCreated(childNodeBeingCopied.isAutoCreated());
+ copy.setMandatory(childNodeBeingCopied.isMandatory());
+ copy.setProtected(childNodeBeingCopied.isProtected());
+ copy.setOnParentVersion(childNodeBeingCopied.getOnParentVersion());
+ copy.setSameNameSiblings(childNodeBeingCopied.allowsSameNameSiblings());
+ copy.setName(childNodeBeingCopied.getName());
+ copy.setDefaultPrimaryTypeName(childNodeBeingCopied.getDefaultPrimaryTypeName());
+ copy.setRequiredPrimaryTypeNames(childNodeBeingCopied.getRequiredPrimaryTypeNames());
return copy;
}
@@ -227,7 +227,7 @@
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
- public boolean equals( Object obj ) {
+ public boolean equals( final Object obj ) {
if (this == obj) {
return true;
}
@@ -236,7 +236,7 @@
return false;
}
- ChildNodeDefinition that = (ChildNodeDefinition)obj;
+ final ChildNodeDefinition that = (ChildNodeDefinition)obj;
if (!this.attributes.equals(that.attributes)) {
return false;
@@ -250,7 +250,7 @@
return false;
}
- return Utils.equivalent(this.getRequiredPrimaryTypeNames(), that.getRequiredPrimaryTypeNames());
+ return this.requiredTypes.equals(that.requiredTypes);
}
/**
@@ -347,6 +347,13 @@
}
/**
+ * @return the qualified name (never <code>null</code>)
+ */
+ public QualifiedName getQualifiedName() {
+ return this.name;
+ }
+
+ /**
* {@inheritDoc}
*
* @see javax.jcr.nodetype.NodeDefinition#getRequiredPrimaryTypeNames()
@@ -368,13 +375,6 @@
}
/**
- * @return the qualified name (never <code>null</code>)
- */
- public QualifiedName getQualifiedName() {
- return this.name;
- }
-
- /**
* @return the list of required types (never <code>null</code> but can be empty)
*/
public List<QualifiedName> getRequiredTypes() {
@@ -730,7 +730,16 @@
/**
* The supports same name siblings indicator.
*/
- SAME_NAME_SIBLINGS,
+ SAME_NAME_SIBLINGS;
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see java.lang.Enum#toString()
+ */
+ @Override
+ public String toString() {
+ return (getClass().getSimpleName() + super.toString());
+ }
}
-
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CndValidator.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CndValidator.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CndValidator.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -35,9 +35,13 @@
*/
public static ValidationStatus isValid( final String value,
final PropertyType propertyType,
- final String propertyName ) {
+ String propertyName ) {
Utils.verifyIsNotNull(propertyType, "propertyType"); //$NON-NLS-1$
+ if (Utils.isEmpty(propertyName)) {
+ propertyName = Messages.missingName;
+ }
+
if (Utils.isEmpty(value)) {
return ValidationStatus.createErrorMessage(NLS.bind(Messages.emptyValue, propertyName));
}
@@ -122,9 +126,11 @@
/**
* @param childNodeDefinition the child node definition being validated (cannot be <code>null</code>)
+ * @param existingChildNodeNames the existing child node names used to check for a duplicate (can be <code>null</code> or empty)
* @return the status (never <code>null</code>)
*/
- public static MultiValidationStatus validateChildNodeDefinition( final ChildNodeDefinition childNodeDefinition ) {
+ public static MultiValidationStatus validateChildNodeDefinition( final ChildNodeDefinition childNodeDefinition,
+ final Collection<QualifiedName> existingChildNodeNames ) {
Utils.verifyIsNotNull(childNodeDefinition, "childNodeDefinition"); //$NON-NLS-1$
/**
@@ -146,7 +152,7 @@
}
// name
- validateName(childNodeDefinition, status);
+ validateName(childNodeDefinition, existingChildNodeNames, status);
// required types
validateRequiredTypes(childNodeDefinition, status);
@@ -159,11 +165,13 @@
/**
* @param childNodeDefinition the child node definition being validated (cannot be <code>null</code>)
+ * @param existingChildNodeNames the existing child node names used to check for a duplicate (can be <code>null</code> or empty)
* @param status the status to add the new status to (never <code>null</code>)
*/
public static void validateChildNodeDefinition( final ChildNodeDefinition childNodeDefinition,
+ final Collection<QualifiedName> existingChildNodeNames,
final MultiValidationStatus status ) {
- final ValidationStatus newStatus = validateChildNodeDefinition(childNodeDefinition);
+ final ValidationStatus newStatus = validateChildNodeDefinition(childNodeDefinition, existingChildNodeNames);
if (!newStatus.isOk()) {
status.add(newStatus);
@@ -195,7 +203,7 @@
final Collection<String> childNodeNames = new ArrayList<String>(childNodeDefinitions.size());
for (final ChildNodeDefinition childNodeDefn : childNodeDefinitions) {
- validateChildNodeDefinition(childNodeDefn, status);
+ validateChildNodeDefinition(childNodeDefn, null, status);
{ // ERROR - Duplicate child node definition names
final String childNodeName = childNodeDefn.getName();
@@ -290,25 +298,63 @@
/**
* @param childNodeDefinition the child node definition whose name is being validated (cannot be <code>null</code>)
+ * @param existingChildNodeNames the existing child node names used to check for a duplicate (can be <code>null</code> or empty)
* @param status the status to add the new status to (cannot be <code>null</code>)
*/
public static void validateName( final ChildNodeDefinition childNodeDefinition,
+ final Collection<QualifiedName> existingChildNodeNames,
final MultiValidationStatus status ) {
// ERROR - Empty or invalid child node definition name
validateQualifiedName(childNodeDefinition.getQualifiedName(), Messages.childDefinitionName, status);
+
+ if (!Utils.isEmpty(existingChildNodeNames) && existingChildNodeNames.contains(childNodeDefinition.getQualifiedName())) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateChildNodeDefinitionName,
+ childNodeDefinition.getName())));
+ }
}
/**
* @param childNodeDefinition the child node definition whose name is being validated (cannot be <code>null</code>)
+ * @param existingChildNodeNames the existing child node names used to check for a duplicate (can be <code>null</code> or empty)
* @return the status (never <code>null</code>)
*/
- public static MultiValidationStatus validateName( final ChildNodeDefinition childNodeDefinition ) {
+ public static MultiValidationStatus validateName( final ChildNodeDefinition childNodeDefinition,
+ final Collection<QualifiedName> existingChildNodeNames ) {
final MultiValidationStatus status = new MultiValidationStatus();
- validateName(childNodeDefinition, status);
+ validateName(childNodeDefinition, existingChildNodeNames, status);
return status;
}
/**
+ * @param propertyDefinition the property definition whose name is being validated (cannot be <code>null</code>)
+ * @param existingPropertyNames the existing property names used to check for a duplicate (can be <code>null</code> or empty)
+ * @param status the status to add the new status to (cannot be <code>null</code>)
+ */
+ public static void validateName( final PropertyDefinition propertyDefinition,
+ final Collection<QualifiedName> existingPropertyNames,
+ final MultiValidationStatus status ) {
+ // ERROR - Empty or invalid child node definition name
+ validateQualifiedName(propertyDefinition.getQualifiedName(), Messages.propertyDefinitionName, status);
+
+ if (!Utils.isEmpty(existingPropertyNames) && existingPropertyNames.contains(propertyDefinition.getQualifiedName())) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateChildNodeDefinitionName,
+ propertyDefinition.getName())));
+ }
+ }
+
+ /**
+ * @param propertyDefinition the property definition whose name is being validated (cannot be <code>null</code>)
+ * @param existingPropertyNames the existing property names used to check for a duplicate (can be <code>null</code> or empty)
+ * @return the status (never <code>null</code>)
+ */
+ public static MultiValidationStatus validateName( final PropertyDefinition propertyDefinition,
+ final Collection<QualifiedName> existingPropertyNames ) {
+ final MultiValidationStatus status = new MultiValidationStatus();
+ validateName(propertyDefinition, existingPropertyNames, status);
+ return status;
+ }
+
+ /**
* @param childNodeDefinition the child node definition whose default type is being validated (cannot be <code>null</code>)
* @return the status (never <code>null</code>)
*/
@@ -717,9 +763,11 @@
/**
* @param propertyDefinition the property definition being validated (never <code>null</code>)
+ * @param existingPropertyNames the existing property names used to check for a duplicate (can be <code>null</code> or empty)
* @return the status (never <code>null</code>)
*/
- public static MultiValidationStatus validatePropertyDefinition( final PropertyDefinition propertyDefinition ) {
+ public static MultiValidationStatus validatePropertyDefinition( final PropertyDefinition propertyDefinition,
+ final Collection<QualifiedName> existingPropertyNames ) {
Utils.verifyIsNotNull(propertyDefinition, "propertyDefinition"); //$NON-NLS-1$
/**
@@ -748,7 +796,7 @@
{ // name
// ERROR - Empty or invalid property definition name
- validateLocalName(propertyDefinition.getName(), Messages.propertyDefinitionName, status);
+ validateName(propertyDefinition, existingPropertyNames, status);
}
{ // property type
@@ -757,76 +805,11 @@
}
{ // default values
- final Collection<String> defaultValues = propertyDefinition.getDefaultValuesAsStrings();
-
- if (Utils.isEmpty(defaultValues)) {
- if (propertyDefinition.getState(PropertyDefinition.PropertyName.DEFAULT_VALUES) == Value.IS) {
- status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.emptyDefaultValues, propertyDefinitionName)));
- }
- } else {
- // ERROR - Cannot have multiple default values when the property definition is single-valued
- if ((defaultValues.size() > 1)
- && (propertyDefinition.getState(PropertyDefinition.PropertyName.MULTIPLE) == Value.IS_NOT)) {
- status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.multipleDefaultValuesForSingleValuedProperty,
- propertyDefinitionName)));
- }
-
- final Collection<String> values = new ArrayList<String>(defaultValues.size());
-
- for (final String defaultValue : defaultValues) {
- // ERROR - Default value is not valid for the property definition type
- isValid(defaultValue, propertyDefinition.getType(), Messages.defaultValue, status);
-
- if (!Utils.isEmpty(defaultValue)) {
- // ERROR - Duplicate default value
- if (values.contains(defaultValue)) {
- status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateDefaultValue,
- propertyDefinitionName, defaultValue)));
- } else {
- values.add(defaultValue);
- }
- }
- }
-
- // ERROR - Cannot have explicit default values when default values is marked as a variant
- if (propertyDefinition.getState(PropertyDefinition.PropertyName.DEFAULT_VALUES) != Value.IS) {
- status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.defaultValuesExistButMarkedAsVariant,
- propertyDefinition)));
- }
- }
+ validateDefaultValues(propertyDefinition, status);
}
{ // value constraints
- final String[] valueConstraints = propertyDefinition.getValueConstraints();
-
- if (Utils.isEmpty(valueConstraints)) {
- if (propertyDefinition.getState(PropertyDefinition.PropertyName.VALUE_CONSTRAINTS) == Value.IS) {
- status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.emptyValueConstraints, propertyDefinitionName)));
- }
- } else {
- final Collection<String> constraints = new ArrayList<String>(valueConstraints.length);
-
- for (final String constraint : valueConstraints) {
- // ERROR - Invalid value constraint
- validateValueConstraint(constraint, status);
-
- if (!Utils.isEmpty(constraint)) {
- // ERROR - Duplicate value constraint
- if (constraints.contains(constraint)) {
- status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateValueConstraint,
- propertyDefinitionName, constraint)));
- } else {
- constraints.add(constraint);
- }
- }
- }
-
- // ERROR - Cannot have explicit value constraints when value constraints is marked as a variant
- if (propertyDefinition.getState(PropertyDefinition.PropertyName.VALUE_CONSTRAINTS) != Value.IS) {
- status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.valueConstraintsExistButMarkedAsVariant,
- propertyDefinition)));
- }
- }
+ validateValueConstraints(propertyDefinition, status);
}
{ // query operators
@@ -867,11 +850,13 @@
/**
* @param propertyDefinition the property definition being validated (never <code>null</code>)
+ * @param existingPropertyNames the existing property names used to check for a duplicate (can be <code>null</code> or empty)
* @param status the status to add the new status to (never <code>null</code>)
*/
public static void validatePropertyDefinition( final PropertyDefinition propertyDefinition,
+ final Collection<QualifiedName> existingPropertyNames,
final MultiValidationStatus status ) {
- final ValidationStatus newStatus = validatePropertyDefinition(propertyDefinition);
+ final ValidationStatus newStatus = validatePropertyDefinition(propertyDefinition, existingPropertyNames);
if (!newStatus.isOk()) {
status.add(newStatus);
@@ -903,7 +888,7 @@
final Collection<String> propNames = new ArrayList<String>(propertyDefinitions.size());
for (final PropertyDefinition propertyDefn : propertyDefinitions) {
- validatePropertyDefinition(propertyDefn, status);
+ validatePropertyDefinition(propertyDefn, null, status);
{ // ERROR - Duplicate property definition names
final String propName = propertyDefn.getName();
@@ -1138,6 +1123,70 @@
}
/**
+ * @param propertyDefinition the property definition whose default values are being validated (cannot be <code>null</code>)
+ * @return the status (never <code>null</code>)
+ */
+ public static MultiValidationStatus validateDefaultValues( final PropertyDefinition propertyDefinition ) {
+ final MultiValidationStatus status = new MultiValidationStatus();
+ validateDefaultValues(propertyDefinition, status);
+ return status;
+ }
+
+ /**
+ * @param propertyDefinition the property definition whose default values are being validated (cannot be <code>null</code>)
+ * @param status the status to add the new status to (cannot be <code>null</code>)
+ */
+ public static void validateDefaultValues( final PropertyDefinition propertyDefinition,
+ final MultiValidationStatus status ) {
+ Utils.verifyIsNotNull(propertyDefinition, "propertyDefinition"); //$NON-NLS-1$
+ Utils.verifyIsNotNull(status, "status"); //$NON-NLS-1$
+
+ String propertyName = propertyDefinition.getName();
+
+ if (Utils.isEmpty(propertyName)) {
+ propertyName = Messages.missingName;
+ }
+
+ final Collection<String> defaultValues = propertyDefinition.getDefaultValuesAsStrings();
+
+ if (Utils.isEmpty(defaultValues)) {
+ if (propertyDefinition.getState(PropertyDefinition.PropertyName.DEFAULT_VALUES) == Value.IS) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.emptyDefaultValues, propertyName)));
+ }
+ } else {
+ // ERROR - Cannot have multiple default values when the property definition is single-valued
+ if ((defaultValues.size() > 1)
+ && (propertyDefinition.getState(PropertyDefinition.PropertyName.MULTIPLE) == Value.IS_NOT)) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.multipleDefaultValuesForSingleValuedProperty,
+ propertyName)));
+ }
+
+ final Collection<String> values = new ArrayList<String>(defaultValues.size());
+
+ for (final String defaultValue : defaultValues) {
+ // ERROR - Default value is not valid for the property definition type
+ isValid(defaultValue, propertyDefinition.getType(), Messages.defaultValue, status);
+
+ if (!Utils.isEmpty(defaultValue)) {
+ // ERROR - Duplicate default value
+ if (values.contains(defaultValue)) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateDefaultValue, propertyName,
+ defaultValue)));
+ } else {
+ values.add(defaultValue);
+ }
+ }
+ }
+
+ // ERROR - Cannot have explicit default values when default values is marked as a variant
+ if (propertyDefinition.getState(PropertyDefinition.PropertyName.DEFAULT_VALUES) != Value.IS) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.defaultValuesExistButMarkedAsVariant,
+ propertyDefinition)));
+ }
+ }
+ }
+
+ /**
* @param nodeTypeDefinitionName the node type name whose supertypes are being checked (cannot be <code>null</code> or empty)
* @param superTypesState the supertypes property state (cannot be <code>null</code>)
* @param superTypeNames the collection of a node type definition's supertypes to validate (can be <code>null</code> or empty)
@@ -1235,7 +1284,7 @@
public static ValidationStatus validateValueConstraint( final String constraint ) {
Utils.verifyIsNotEmpty(constraint, "constraint"); //$NON-NLS-1$
- // TODO implement validateValueConstraint
+ // TODO implement validateValueConstraint to make sure constraint is property syntax
return ValidationStatus.OK_STATUS;
}
@@ -1253,6 +1302,63 @@
}
/**
+ * @param propertyDefinition the property definition whose value constraints are being validated (cannot be <code>null</code>)
+ * @return the status (never <code>null</code>)
+ */
+ public static MultiValidationStatus validateValueConstraints( final PropertyDefinition propertyDefinition ) {
+ final MultiValidationStatus status = new MultiValidationStatus();
+ validateValueConstraints(propertyDefinition, status);
+ return status;
+ }
+
+ /**
+ * @param propertyDefinition the property definition whose value constraints are being validated (cannot be <code>null</code>)
+ * @param status the status to add the new status to (cannot be <code>null</code>)
+ */
+ public static void validateValueConstraints( final PropertyDefinition propertyDefinition,
+ final MultiValidationStatus status ) {
+ Utils.verifyIsNotNull(propertyDefinition, "propertyDefinition"); //$NON-NLS-1$
+ Utils.verifyIsNotNull(status, "status"); //$NON-NLS-1$
+
+ String propertyName = propertyDefinition.getName();
+
+ if (Utils.isEmpty(propertyName)) {
+ propertyName = Messages.missingName;
+ }
+
+ final String[] valueConstraints = propertyDefinition.getValueConstraints();
+
+ if (Utils.isEmpty(valueConstraints)) {
+ if (propertyDefinition.getState(PropertyDefinition.PropertyName.VALUE_CONSTRAINTS) == Value.IS) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.emptyValueConstraints, propertyName)));
+ }
+ } else {
+ final Collection<String> constraints = new ArrayList<String>(valueConstraints.length);
+
+ for (final String constraint : valueConstraints) {
+ // ERROR - Invalid value constraint
+ validateValueConstraint(constraint, status);
+
+ if (!Utils.isEmpty(constraint)) {
+ // ERROR - Duplicate value constraint
+ if (constraints.contains(constraint)) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateValueConstraint,
+ propertyName, constraint)));
+ } else {
+ constraints.add(constraint);
+ }
+ }
+ }
+
+ // ERROR - Cannot have explicit value constraints when value constraints is marked as a variant
+ if (propertyDefinition.getState(PropertyDefinition.PropertyName.VALUE_CONSTRAINTS) != Value.IS) {
+ status.add(ValidationStatus.createErrorMessage(NLS.bind(Messages.valueConstraintsExistButMarkedAsVariant,
+ propertyDefinition)));
+ }
+ }
+ }
+
+ /**
* Don't allow construction.
*/
private CndValidator() {
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CompactNodeTypeDefinition.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CompactNodeTypeDefinition.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/CompactNodeTypeDefinition.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -314,7 +314,17 @@
/**
* The node type definitions property.
*/
- NODE_TYPE_DEFINITIONS
+ NODE_TYPE_DEFINITIONS;
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see java.lang.Enum#toString()
+ */
+ @Override
+ public String toString() {
+ return (getClass().getSimpleName() + super.toString());
+ }
}
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NamespaceMapping.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NamespaceMapping.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NamespaceMapping.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -227,7 +227,7 @@
/**
* {@inheritDoc}
- *
+ *
* @see java.lang.Object#toString()
*/
@Override
@@ -244,6 +244,7 @@
* The property names whose <code>toString()</code> is used in {@link PropertyChangeEvent}s.
*/
public enum PropertyName {
+
/**
* The namespace prefix.
*/
@@ -252,7 +253,16 @@
/**
* The namespace URI.
*/
- URI
+ URI;
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see java.lang.Enum#toString()
+ */
+ @Override
+ public String toString() {
+ return (getClass().getSimpleName() + super.toString());
+ }
}
-
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NodeTypeDefinition.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NodeTypeDefinition.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/NodeTypeDefinition.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -416,6 +416,13 @@
return new ArrayList<PropertyDefinitionTemplate>(getPropertyDefinitions());
}
+ /**
+ * @return the node type definition's qualified name (never <code>null</code>)
+ */
+ public QualifiedName getQualifiedName() {
+ return this.name;
+ }
+
private String getStartChildNodeDefinitionDelimiter() {
return CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.CHILD_NODE_DEFINITION_START_DELIMITER);
}
@@ -814,7 +821,17 @@
/**
* The collection for super types.
*/
- SUPERTYPES
+ SUPERTYPES;
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see java.lang.Enum#toString()
+ */
+ @Override
+ public String toString() {
+ return (getClass().getSimpleName() + super.toString());
+ }
}
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinition.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinition.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinition.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -46,6 +46,27 @@
public static final String RESIDUAL_PROPERTY_NAME = "*"; //$NON-NLS-1$
/**
+ * @param propertyBeingCopied the property definition being copied (cannot be <code>null</code>)
+ * @return the copy (never <code>null</code>)
+ */
+ public static final PropertyDefinition copy( final PropertyDefinition propertyBeingCopied ) {
+ final PropertyDefinition copy = new PropertyDefinition();
+ copy.setName(propertyBeingCopied.getName());
+ copy.setAutoCreated(propertyBeingCopied.isAutoCreated());
+ copy.setAvailableQueryOperators(propertyBeingCopied.getAvailableQueryOperators());
+ copy.setDefaultValues(propertyBeingCopied.getDefaultValues());
+ copy.setFullTextSearchable(propertyBeingCopied.isFullTextSearchable());
+ copy.setMandatory(propertyBeingCopied.isMandatory());
+ copy.setMultiple(propertyBeingCopied.isMultiple());
+ copy.setOnParentVersion(propertyBeingCopied.getOnParentVersion());
+ copy.setProtected(propertyBeingCopied.isProtected());
+ copy.setQueryOrderable(propertyBeingCopied.isQueryOrderable());
+ copy.setRequiredType(propertyBeingCopied.getRequiredType());
+ copy.setValueConstraints(propertyBeingCopied.getValueConstraints());
+ return copy;
+ }
+
+ /**
* The property attributes (never <code>null</code>).
*/
private final PropertyAttributes attributes;
@@ -270,6 +291,44 @@
}
/**
+ * {@inheritDoc}
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals( final Object obj ) {
+ if (this == obj) {
+ return true;
+ }
+
+ if ((obj == null) || !getClass().equals(obj.getClass())) {
+ return false;
+ }
+
+ final PropertyDefinition that = (PropertyDefinition)obj;
+ // this.defaultValues = new DefaultValues();
+ // this.valueConstraints = new ValueConstraints();
+
+ if (!this.attributes.equals(that.attributes)) {
+ return false;
+ }
+
+ if (!Utils.equals(getName(), that.getName())) {
+ return false;
+ }
+
+ if (this.type != that.type) {
+ return false;
+ }
+
+ if (!this.defaultValues.equals(that.defaultValues)) {
+ return false;
+ }
+
+ return this.valueConstraints.equals(that.valueConstraints);
+ }
+
+ /**
* @param notationType the notation type being requested (cannot be <code>null</code>)
* @return the CND notation (never <code>null</code>)
*/
@@ -355,6 +414,13 @@
}
/**
+ * @return the qualified name (never <code>null</code>)
+ */
+ public QualifiedName getQualifiedName() {
+ return this.name;
+ }
+
+ /**
* {@inheritDoc}
*
* @see javax.jcr.nodetype.PropertyDefinition#getRequiredType()
@@ -450,6 +516,16 @@
/**
* {@inheritDoc}
*
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ return Utils.hashCode(this.attributes, this.name, this.defaultValues, this.type, this.valueConstraints);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
* @see javax.jcr.nodetype.ItemDefinition#isAutoCreated()
*/
@Override
@@ -897,7 +973,16 @@
/**
* The collection of property constraints.
*/
- VALUE_CONSTRAINTS
+ VALUE_CONSTRAINTS;
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see java.lang.Enum#toString()
+ */
+ @Override
+ public String toString() {
+ return (getClass().getSimpleName() + super.toString());
+ }
}
-
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/attributes/ListAttributeState.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/attributes/ListAttributeState.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr/src/org/jboss/tools/modeshape/jcr/cnd/attributes/ListAttributeState.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -104,6 +104,15 @@
}
/**
+ * @param item the item being checked to see if it is already supported (cannot be <code>null</code>)
+ * @return <code>true</code> if already exists
+ */
+ public boolean exists( E item ) {
+ Utils.verifyIsNotNull(item, "item"); //$NON-NLS-1$
+ return getSupportedItems().contains(item);
+ }
+
+ /**
* @param notationType the notation type whose CND notation prefix is being requested (cannot be <code>null</code>)
* @return the CND notation prefix (can be <code>null</code> or empty)
*/
@@ -285,7 +294,7 @@
*/
public boolean supports( final E item ) {
Utils.verifyIsNotNull(item, "item"); //$NON-NLS-1$
- return this.supported.contains(item);
+ return getSupportedItems().contains(item);
}
/**
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/ChildNodeDialog.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/ChildNodeDialog.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/ChildNodeDialog.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -42,8 +42,10 @@
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
@@ -71,9 +73,9 @@
import org.jboss.tools.modeshape.ui.forms.MessageFormDialog;
/**
- *
+ * A dialog used to create and edit {@link ChildNodeDefinition}s.
*/
-class ChildNodeDialog extends FormDialog {
+final class ChildNodeDialog extends FormDialog {
private IAction addRequiredType;
private Button btnOk;
@@ -81,17 +83,18 @@
private final ErrorMessage defaultTypeError;
private IAction deleteRequiredType;
private IAction editRequiredType;
-
/**
* The existing child node definition names contained in the CND (never <code>null</code> but can be empty).
*/
- private Collection<QualifiedName> existingChildNodeNames;
+ private final Collection<QualifiedName> existingChildNodeNames;
/**
* The existing namespace prefixes contained in the CND (never <code>null</code> but can be empty).
*/
- private Collection<String> existingNamespacePrefixes;
+ private final Collection<String> existingNamespacePrefixes;
+ private QualifiedNameEditor nameEditor;
+
private final ErrorMessage nameError;
private ChildNodeDefinition originalChildNode;
@@ -123,19 +126,12 @@
}
/**
- * @return the child node definition represented by the dialog UI controls (never <code>null</code>)
- */
- public ChildNodeDefinition getChildNodeDefinition() {
- return this.childNodeBeingEdited;
- }
-
- /**
- * Used to create a new child node definition.
+ * Used to edit a child node definition.
*
* @param parentShell the parent shell (can be <code>null</code>)
* @param existingChildNodeNames the existing child node names (can be <code>null</code> or empty)
- * @param childNodeBeingEdited the child node definition being edited (cannot be <code>null</code>)
* @param existingNamespacePrefixes the existing CND namespace prefixes (can be <code>null</code> or empty)
+ * @param childNodeBeingEdited the child node definition being edited (cannot be <code>null</code>)
*/
public ChildNodeDialog( final Shell parentShell,
final Collection<QualifiedName> existingChildNodeNames,
@@ -151,7 +147,7 @@
// remove name from existing names so that validation won't show it as a duplicate
if (!Utils.isEmpty(this.childNodeBeingEdited.getName())) {
- this.existingChildNodeNames.remove(this.childNodeBeingEdited.getName());
+ this.existingChildNodeNames.remove(this.childNodeBeingEdited.getQualifiedName());
}
}
@@ -216,35 +212,27 @@
toolkit.paintBordersFor(leftContainer);
{ // name
- toolkit.createLabel(leftContainer, CndMessages.nameLabel);
- final Text txtName = toolkit.createText(leftContainer, Utils.EMPTY_STRING, Styles.TEXT_STYLE);
- txtName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- txtName.setToolTipText(CndMessages.childNodeNameToolTip);
+ this.nameEditor = new QualifiedNameEditor(leftContainer,
+ SWT.NONE,
+ toolkit,
+ Messages.propertyDefinitionName,
+ this.existingNamespacePrefixes,
+ this.childNodeBeingEdited.getQualifiedName());
+ ((GridData)this.nameEditor.getLayoutData()).horizontalSpan = 2;
+ this.nameEditor.addListener(SWT.Modify, new Listener() {
- if (isEditMode()) {
- String currentValue = this.childNodeBeingEdited.getName();
-
- if (currentValue == null) {
- currentValue = Utils.EMPTY_STRING;
- }
-
- txtName.setText(currentValue);
- }
-
- txtName.addModifyListener(new ModifyListener() {
-
/**
* {@inheritDoc}
*
- * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
*/
@Override
- public void modifyText( final ModifyEvent e ) {
- handleNameChanged(((Text)e.widget).getText());
+ public void handleEvent( final Event e ) {
+ handleNameChanged(e.text);
}
});
- this.nameError.setControl(txtName);
+ this.nameError.setControl(this.nameEditor);
}
{ // default type
@@ -283,7 +271,7 @@
final Group attributesContainer = new Group(leftContainer, SWT.SHADOW_NONE);
attributesContainer.setText(CndMessages.attributesHeaderText);
attributesContainer.setLayout(new GridLayout(2, true));
- GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
+ final GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
gd.horizontalSpan = 2;
attributesContainer.setLayoutData(gd);
toolkit.adapt(attributesContainer);
@@ -374,11 +362,10 @@
});
btnSameNamedSiblings.setToolTipText(CndMessages.sameNamedSiblingsAttributeToolTip);
-
{ // opv
final Composite opvContainer = toolkit.createComposite(attributesContainer);
opvContainer.setLayout(new GridLayout(2, false));
- GridData gdOpv = new GridData(SWT.FILL, SWT.CENTER, true, false);
+ final GridData gdOpv = new GridData(SWT.FILL, SWT.CENTER, true, false);
gdOpv.horizontalSpan = 2;
opvContainer.setLayoutData(gdOpv);
toolkit.paintBordersFor(opvContainer);
@@ -389,6 +376,7 @@
final CCombo cbxOpvs = new CCombo(opvContainer, Styles.COMBO_STYLE);
toolkit.adapt(cbxOpvs, true, false);
cbxOpvs.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+ ((GridData)cbxOpvs.getLayoutData()).heightHint = cbxOpvs.getItemHeight() + 4;
cbxOpvs.setToolTipText(CndMessages.onParentVersionToolTip);
// populate opv values
@@ -613,6 +601,15 @@
}
/**
+ * <strong>Should only be called after the dialog's <code>OK</code> button has been selected.</strong>
+ *
+ * @return the child node definition represented by the dialog UI controls (never <code>null</code>)
+ */
+ public ChildNodeDefinition getChildNodeDefinition() {
+ return this.childNodeBeingEdited;
+ }
+
+ /**
* @return the selected required type or <code>null</code> if the viewer has an empty selection
*/
private String getSelectedRequiredType() {
@@ -639,9 +636,7 @@
if (dialog.open() == Window.OK) {
final QualifiedName newQName = dialog.getQualifiedName();
- if (this.childNodeBeingEdited.addRequiredType(newQName.get())) {
- this.requiredTypesViewer.refresh();
- } else {
+ if (!this.childNodeBeingEdited.addRequiredType(newQName.get())) {
MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
NLS.bind(CndMessages.errorAddingRequiredType, newQName));
}
@@ -764,26 +759,10 @@
}
private boolean isEditMode() {
- return (this.childNodeBeingEdited != null);
+ return (this.originalChildNode != null);
}
- private void validateAttributes() {
- // no validation required
- }
-
- private void validateDefaultType() {
- updateMessage(CndValidator.validateDefaultType(this.childNodeBeingEdited), this.defaultTypeError);
- }
-
- private void validateName() {
- updateMessage(CndValidator.validateName(this.childNodeBeingEdited), this.nameError);
- }
-
- private void validateRequiredTypes() {
- updateMessage(CndValidator.validateRequiredTypes(this.childNodeBeingEdited), this.requiredTypesError);
- }
-
- private void updateMessage( final ValidationStatus status,
+ private void updateMessage( final ValidationStatus status,
final ErrorMessage errorMsg ) {
JcrUiUtils.setMessage(status, errorMsg);
@@ -796,7 +775,7 @@
}
private void updateState() {
- int messageType = this.scrolledForm.getMessageType();
+ final int messageType = this.scrolledForm.getMessageType();
boolean enable = (messageType != IMessageProvider.ERROR);
if (enable && isEditMode() && this.originalChildNode.equals(this.childNodeBeingEdited)) {
@@ -808,4 +787,20 @@
this.btnOk.setEnabled(enable);
}
}
+
+ private void validateAttributes() {
+ // no validation required since user cannot enter an invalid value
+ }
+
+ private void validateDefaultType() {
+ updateMessage(CndValidator.validateDefaultType(this.childNodeBeingEdited), this.defaultTypeError);
+ }
+
+ private void validateName() {
+ updateMessage(this.nameEditor.getStatus(), this.nameError);
+ }
+
+ private void validateRequiredTypes() {
+ updateMessage(CndValidator.validateRequiredTypes(this.childNodeBeingEdited), this.requiredTypesError);
+ }
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndEditor.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndEditor.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndEditor.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -24,7 +24,6 @@
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.text.source.IAnnotationModel;
import org.eclipse.osgi.util.NLS;
@@ -194,6 +193,7 @@
List<Throwable> errors = new ArrayList<Throwable>();
this.cndBeingEdited = importer.importFrom(getFile().getContents(), errors, getFile().getName());
// TODO implement
+ this.cndBeingEdited.addListener(this);
}
/**
@@ -233,7 +233,7 @@
@Override
public void doSaveAs() {
// TODO implement doSaveAs
- final IProgressMonitor progressMonitor = getProgressMonitor();
+// final IProgressMonitor progressMonitor = getProgressMonitor();
// SaveAsDialog dialog = new SaveAsDialog(getShell());
// dialog.setOriginalFile(getFile());
// dialog.create();
@@ -299,12 +299,12 @@
IMessageManager getMessageManager() {
return this.scrolledForm.getMessageManager();
}
+//
+// private IProgressMonitor getProgressMonitor() {
+// final IStatusLineManager statusLineMgr = getEditorSite().getActionBars().getStatusLineManager();
+// return ((statusLineMgr == null) ? null : statusLineMgr.getProgressMonitor());
+// }
- private IProgressMonitor getProgressMonitor() {
- final IStatusLineManager statusLineMgr = getEditorSite().getActionBars().getStatusLineManager();
- return ((statusLineMgr == null) ? null : statusLineMgr.getProgressMonitor());
- }
-
/**
* @return the editor's shell (never <code>null</code>)
*/
@@ -427,7 +427,6 @@
public void propertyChange( final PropertyChangeEvent e ) {
refreshDirtyState();
this.formsPage.handlePropertyChanged(e);
-// this.sourcePage.handlePropertyChanged(e);
}
void refreshCnd() {
@@ -444,7 +443,6 @@
createCnd();
this.formsPage.handleCndReloaded();
-// this.sourcePage.handleCndReloaded();
} catch (final Exception e) {
// TODO log this
MessageFormDialog.openError(getShell(), CndMessages.cndEditorRefreshErrorTitle,
@@ -481,9 +479,6 @@
this.formsPage.setResourceReadOnly(this.readOnly);
this.formsPage.getManagedForm().refresh();
-//
-// this.sourcePage.setResourceReadOnly(this.readOnly);
-// this.sourcePage.getManagedForm().refresh();
}
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndFormsEditorPage.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndFormsEditorPage.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndFormsEditorPage.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -38,7 +38,6 @@
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
@@ -53,17 +52,20 @@
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.ui.forms.IFormColors;
import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.IMessageManager;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
import org.jboss.tools.modeshape.jcr.Messages;
import org.jboss.tools.modeshape.jcr.MultiValidationStatus;
import org.jboss.tools.modeshape.jcr.Utils;
+import org.jboss.tools.modeshape.jcr.ValidationStatus;
import org.jboss.tools.modeshape.jcr.cnd.ChildNodeDefinition;
import org.jboss.tools.modeshape.jcr.cnd.CndElement.NotationType;
import org.jboss.tools.modeshape.jcr.cnd.CndValidator;
@@ -95,7 +97,6 @@
private Button btnMixin;
private Button btnOrderable;
private Button btnQueryable;
- private CCombo cbxNamePrefix;
private Section childNodeSection;
private final ErrorMessage childNodesError;
private TableViewer childNodeViewer;
@@ -107,14 +108,13 @@
private Section detailsSection;
private IAction editChildNode;
private IAction editNamespace;
- private IAction editNodeType;
private IAction editProperty;
private IAction editSuperType;
+ private QualifiedNameEditor nameEditor;
private final ErrorMessage namespacesError;
private TableViewer namespaceViewer;
private final ErrorMessage nodeTypeNameError;
private String nodeTypeNameFilterPattern;
- private final ErrorMessage nodeTypeNamePrefixError;
private final ErrorMessage nodeTypesError;
private TableViewer nodeTypeViewer;
private final ErrorMessage propertiesError;
@@ -122,7 +122,6 @@
private TableViewer propertyViewer;
private final ErrorMessage superTypesError;
private TableViewer superTypesViewer;
- private Text txtName;
/**
* @param cndEditor the CND editor this page belongs to (cannot be <code>null</code>)
@@ -135,7 +134,6 @@
this.namespacesError = new ErrorMessage();
this.nodeTypesError = new ErrorMessage();
this.nodeTypeNameError = new ErrorMessage();
- this.nodeTypeNamePrefixError = new ErrorMessage();
this.propertiesError = new ErrorMessage();
this.superTypesError = new ErrorMessage();
}
@@ -235,7 +233,7 @@
((GridData)table.getLayoutData()).heightHint = table.getItemHeight() * 5;
// table context menu
- MenuManager menuManager = new MenuManager();
+ final MenuManager menuManager = new MenuManager();
menuManager.add(new DelegateAction(CndMessages.addChildNodeMenuText, this.addChildNode));
menuManager.add(new DelegateAction(CndMessages.editChildNodeMenuText, this.editChildNode));
menuManager.add(new DelegateAction(CndMessages.deleteChildNodeMenuText, this.deleteChildNode));
@@ -416,46 +414,29 @@
leftContainer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
toolkit.paintBordersFor(leftContainer);
- { // name qualifier
- toolkit.createLabel(leftContainer, CndMessages.namespaceLabel);
- this.cbxNamePrefix = new CCombo(leftContainer, Styles.COMBO_STYLE);
- toolkit.adapt(this.cbxNamePrefix, true, false);
- this.nodeTypeNamePrefixError.setControl(this.cbxNamePrefix);
- this.cbxNamePrefix.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- ((GridData)this.cbxNamePrefix.getLayoutData()).heightHint = this.cbxNamePrefix.getItemHeight() + 4;
-
- this.cbxNamePrefix.addModifyListener(new ModifyListener() {
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
- */
- @Override
- public void modifyText( final ModifyEvent e ) {
- handleNameQualifierChanged(((CCombo)e.widget).getText());
- }
- });
- }
-
{ // name
- toolkit.createLabel(leftContainer, CndMessages.nameLabel);
- this.txtName = toolkit.createText(leftContainer, Utils.EMPTY_STRING, Styles.TEXT_STYLE);
- this.txtName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- this.txtName.addModifyListener(new ModifyListener() {
+ this.nameEditor = new QualifiedNameEditor(leftContainer,
+ SWT.NONE,
+ toolkit,
+ Messages.propertyDefinitionName,
+ getNamespacePrefixes(),
+ null);
+ ((GridData)this.nameEditor.getLayoutData()).horizontalSpan = 2;
+ this.nameEditor.addListener(SWT.Modify, new Listener() {
/**
* {@inheritDoc}
*
- * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
*/
@Override
- public void modifyText( final ModifyEvent e ) {
- handleNodeTypeNameChanged(((Text)e.widget).getText());
+ public void handleEvent( final Event e ) {
+ handleNodeTypeNameChanged(e.text);
}
});
- this.nodeTypeNameError.setControl(this.txtName);
+ this.nodeTypeNameError.setControl(this.nameEditor);
+ refreshNameControls(); // populate name editor controls
}
{ // attributes
@@ -533,7 +514,6 @@
this.btnQueryable.setToolTipText(CndMessages.queryableAttributeToolTip);
// fill with data from CND
- refreshNameControls();
refreshAttributeControls();
}
}
@@ -552,12 +532,13 @@
table.setHeaderVisible(false);
table.setLinesVisible(false);
((GridData)table.getLayoutData()).heightHint = table.getItemHeight() * 2;
+ table.setToolTipText(CndMessages.supertypesToolTip);
this.superTypesError.setControl(table);
createSuperTypesActions();
// table context menu
- MenuManager menuManager = new MenuManager();
+ final MenuManager menuManager = new MenuManager();
menuManager.add(new DelegateAction(CndMessages.addSuperTypeMenuText, this.addSuperType));
menuManager.add(new DelegateAction(CndMessages.editSuperTypeMenuText, this.editSuperType));
menuManager.add(new DelegateAction(CndMessages.deleteSuperTypeMenuText, this.deleteSuperType));
@@ -658,7 +639,7 @@
((GridData)table.getLayoutData()).heightHint = table.getItemHeight() * 5;
// table context menu
- MenuManager menuManager = new MenuManager();
+ final MenuManager menuManager = new MenuManager();
menuManager.add(new DelegateAction(CndMessages.addNamespaceMenuText, this.addNamespace));
menuManager.add(new DelegateAction(CndMessages.editNamespaceMenuText, this.editNamespace));
menuManager.add(new DelegateAction(CndMessages.deleteNamespaceMenuText, this.deleteNamespace));
@@ -819,22 +800,6 @@
this.deleteNodeType.setEnabled(false);
this.deleteNodeType.setToolTipText(CndMessages.deleteNodeTypeToolTip);
this.deleteNodeType.setImageDescriptor(JcrUiUtils.getDeleteImageDescriptor());
-
- this.editNodeType = new Action(Utils.EMPTY_STRING) {
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.jface.action.Action#run()
- */
- @Override
- public void run() {
- handleEditNodeType();
- }
- };
- this.editNodeType.setEnabled(false);
- this.editNodeType.setToolTipText(CndMessages.editNodeTypeToolTip);
- this.editNodeType.setImageDescriptor(JcrUiUtils.getEditImageDescriptor());
}
@SuppressWarnings("unused")
@@ -851,7 +816,7 @@
createNodeTypeActions();
// create toolbar
- FormUtils.createSectionToolBar(section, toolkit, new IAction[] { this.addNodeType, this.editNodeType, this.deleteNodeType });
+ FormUtils.createSectionToolBar(section, toolkit, new IAction[] { this.addNodeType, this.deleteNodeType });
// splitter has node type table on left and node type detail, properties, and child nodes on right
final SashForm splitter = new SashForm(section, SWT.HORIZONTAL);
@@ -896,9 +861,8 @@
table.setLinesVisible(false);
// table context menu
- MenuManager menuManager = new MenuManager();
+ final MenuManager menuManager = new MenuManager();
menuManager.add(new DelegateAction(CndMessages.addNodeTypeMenuText, this.addNodeType));
- menuManager.add(new DelegateAction(CndMessages.editNodeTypeMenuText, this.editNodeType));
menuManager.add(new DelegateAction(CndMessages.deleteNodeTypeMenuText, this.deleteNodeType));
table.setMenu(menuManager.createContextMenu(table));
@@ -981,20 +945,6 @@
}
});
- // open edit namespace on double click
- this.nodeTypeViewer.addDoubleClickListener(new IDoubleClickListener() {
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent)
- */
- @Override
- public void doubleClick( final DoubleClickEvent event ) {
- handleEditNodeType();
- }
- });
-
// add selection listener
this.nodeTypeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@@ -1140,7 +1090,7 @@
((GridData)table.getLayoutData()).heightHint = table.getItemHeight() * 5;
// table context menu
- MenuManager menuManager = new MenuManager();
+ final MenuManager menuManager = new MenuManager();
menuManager.add(new DelegateAction(CndMessages.addPropertyMenuText, this.addProperty));
menuManager.add(new DelegateAction(CndMessages.editPropertyMenuText, this.editProperty));
menuManager.add(new DelegateAction(CndMessages.deletePropertyMenuText, this.deleteProperty));
@@ -1176,7 +1126,7 @@
final NotationType notationType = NotationType.LONG;
if (this.columnIndex == PropertyColumnIndexes.TYPE) {
- return propertyDefinition.getType().toCndNotation(notationType);
+ return propertyDefinition.getType().toString();
}
if (this.columnIndex == PropertyColumnIndexes.ATTRIBUTES) {
@@ -1184,7 +1134,13 @@
}
if (this.columnIndex == PropertyColumnIndexes.DEFAULT_VALUES) {
- return propertyDefinition.getType().toCndNotation(NotationType.LONG);
+ final List<String> defaultValues = propertyDefinition.getDefaultValuesAsStrings();
+
+ if (Utils.isEmpty(defaultValues)) {
+ return Utils.EMPTY_STRING;
+ }
+
+ return UiUtils.join(defaultValues, null);
}
assert (this.columnIndex == PropertyColumnIndexes.CONSTRAINTS) : "Unexpected property column index"; //$NON-NLS-1$
@@ -1432,6 +1388,25 @@
});
}
+ Collection<QualifiedName> getChildNodeNames() {
+ assert (getSelectedNodeType() != null) : "getChildNodeNames called but no selected node type"; //$NON-NLS-1$
+ final Collection<ChildNodeDefinition> childNodes = getSelectedNodeType().getChildNodeDefinitions();
+
+ if (childNodes.isEmpty()) {
+ return Collections.emptyList();
+ }
+
+ final Collection<QualifiedName> childNodeNames = new ArrayList<QualifiedName>(childNodes.size());
+
+ for (final ChildNodeDefinition childNode : childNodes) {
+ if (!Utils.isEmpty(childNode.getName())) {
+ childNodeNames.add(childNode.getQualifiedName());
+ }
+ }
+
+ return childNodeNames;
+ }
+
private List<String> getNamespacePrefixes() {
final List<NamespaceMapping> namespaces = getCnd().getNamespaceMappings();
@@ -1455,6 +1430,43 @@
return this.nodeTypeNameFilterPattern;
}
+ Collection<QualifiedName> getNodeTypeNames() {
+ final Collection<NodeTypeDefinition> nodeTypes = getCnd().getNodeTypeDefinitions();
+
+ if (nodeTypes.isEmpty()) {
+ return Collections.emptyList();
+ }
+
+ final Collection<QualifiedName> nodeTypeNames = new ArrayList<QualifiedName>(nodeTypes.size());
+
+ for (final NodeTypeDefinition nodeType : nodeTypes) {
+ if (!Utils.isEmpty(nodeType.getName())) {
+ nodeTypeNames.add(nodeType.getQualifiedName());
+ }
+ }
+
+ return nodeTypeNames;
+ }
+
+ Collection<QualifiedName> getPropertyNames() {
+ assert (getSelectedNodeType() != null) : "getPropertyNames called but no selected node type"; //$NON-NLS-1$
+ final Collection<PropertyDefinition> propDefns = getSelectedNodeType().getPropertyDefinitions();
+
+ if (propDefns.isEmpty()) {
+ return Collections.emptyList();
+ }
+
+ final Collection<QualifiedName> propDefnNames = new ArrayList<QualifiedName>(propDefns.size());
+
+ for (final PropertyDefinition propDefn : propDefns) {
+ if (!Utils.isEmpty(propDefn.getName())) {
+ propDefnNames.add(propDefn.getQualifiedName());
+ }
+ }
+
+ return propDefnNames;
+ }
+
/**
* @return the selected child node definition or <code>null</code> if the viewer has an empty selection
*/
@@ -1534,38 +1546,22 @@
getSelectedNodeType().setAbstract(newValue);
}
- Collection<QualifiedName> getChildNodeNames() {
- assert (getSelectedNodeType() != null) : "Add child node handler called but no selected node type"; //$NON-NLS-1$
- Collection<ChildNodeDefinition> childNodes = getSelectedNodeType().getChildNodeDefinitions();
-
- if (childNodes.isEmpty()) {
- return Collections.emptyList();
- }
-
- Collection<QualifiedName> childNodeNames = new ArrayList<QualifiedName>(childNodes.size());
-
- for (ChildNodeDefinition childNode : childNodes) {
- if (!Utils.isEmpty(childNode.getName())) {
- childNodeNames.add(childNode.getQualifiedName());
- }
- }
-
- return childNodeNames;
- }
-
void handleAddChildNode() {
assert (getSelectedNodeType() != null) : "add child node handler called but there is no selected node type"; //$NON-NLS-1$
- ChildNodeDialog dialog = new ChildNodeDialog(getShell(), getChildNodeNames(), getNamespacePrefixes());
+ final ChildNodeDialog dialog = new ChildNodeDialog(getShell(), getChildNodeNames(), getNamespacePrefixes());
dialog.create();
dialog.getShell().pack();
if (dialog.open() == Window.OK) {
- ChildNodeDefinition newChildNodeDefinition = dialog.getChildNodeDefinition();
+ final ChildNodeDefinition newChildNodeDefinition = dialog.getChildNodeDefinition();
- // select new child node definition
+ // add and select new child node definition
if (getSelectedNodeType().addChildNodeDefinition(newChildNodeDefinition)) {
this.childNodeViewer.setSelection(new StructuredSelection(newChildNodeDefinition));
+ } else {
+ MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorAddingChildNode, newChildNodeDefinition.getName()));
}
}
}
@@ -1576,25 +1572,59 @@
dialog.getShell().pack();
if (dialog.open() == Window.OK) {
- final NamespaceMapping namespaceMapping = dialog.getNamespaceMapping();
+ final NamespaceMapping newNamespaceMapping = dialog.getNamespaceMapping();
- if (getCnd().addNamespaceMapping(namespaceMapping)) {
- this.namespaceViewer.refresh();
+ if (getCnd().addNamespaceMapping(newNamespaceMapping)) {
+ this.namespaceViewer.setSelection(new StructuredSelection(newNamespaceMapping));
} else {
MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
- NLS.bind(CndMessages.errorAddingNamespaceMapping, namespaceMapping));
+ NLS.bind(CndMessages.errorAddingNamespaceMapping, newNamespaceMapping));
}
}
}
void handleAddNodeType() {
- // TODO handleAddNodeType
- MessageFormDialog.openInfo(getShell(), "Not Implemented Yet", null, "method has not be implemented"); //$NON-NLS-1$ //$NON-NLS-2$
+ final QualifiedNameDialog dialog = new QualifiedNameDialog(getShell(),
+ CndMessages.newNodeTypeDialogTitle,
+ Messages.nodeTypeDefinitionName,
+ getNamespacePrefixes());
+ dialog.setExistingQNames(getNodeTypeNames());
+ dialog.create();
+ dialog.getShell().pack();
+
+ if (dialog.open() == Window.OK) {
+ final QualifiedName newNodeTypeName = dialog.getQualifiedName();
+ final NodeTypeDefinition newNodeTypeDefinition = new NodeTypeDefinition();
+ newNodeTypeDefinition.setName(newNodeTypeName.get());
+
+ // add and select new node type definition
+ if (getCnd().addNodeTypeDefinition(newNodeTypeDefinition)) {
+ this.nodeTypeViewer.setSelection(new StructuredSelection(newNodeTypeDefinition));
+ } else {
+ MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorAddingNodeType, newNodeTypeName));
+ }
+ }
}
void handleAddProperty() {
- // TODO handleAddProperty
- MessageFormDialog.openInfo(getShell(), "Not Implemented Yet", null, "method has not be implemented"); //$NON-NLS-1$ //$NON-NLS-2$
+ assert (getSelectedNodeType() != null) : "add property handler called but there is no selected node type"; //$NON-NLS-1$
+
+ final PropertyDialog dialog = new PropertyDialog(getShell(), getPropertyNames(), getNamespacePrefixes());
+ dialog.create();
+ dialog.getShell().pack();
+
+ if (dialog.open() == Window.OK) {
+ final PropertyDefinition newPropertyDefinition = dialog.getPropertyDefinition();
+
+ // add and select new property definition
+ if (getSelectedNodeType().addPropertyDefinition(newPropertyDefinition)) {
+ this.propertyViewer.setSelection(new StructuredSelection(newPropertyDefinition));
+ } else {
+ MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorAddingProperty, newPropertyDefinition.getName()));
+ }
+ }
}
void handleAddSuperType() {
@@ -1610,13 +1640,14 @@
if (dialog.open() == Window.OK) {
final NodeTypeDefinition nodeTypeDefinition = getSelectedNodeType();
- final QualifiedName newQName = dialog.getQualifiedName();
+ final QualifiedName newSupertype = dialog.getQualifiedName();
- if (nodeTypeDefinition.addSuperType(newQName.get())) {
- this.superTypesViewer.refresh();
+ // add and select new supertype
+ if (nodeTypeDefinition.addSuperType(newSupertype.get())) {
+ this.superTypesViewer.setSelection(new StructuredSelection(newSupertype.get()));
} else {
MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
- NLS.bind(CndMessages.errorAddingSupertype, newQName));
+ NLS.bind(CndMessages.errorAddingSupertype, newSupertype));
}
}
}
@@ -1671,7 +1702,10 @@
// show confirmation dialog
if (MessageFormDialog.openQuestion(getShell(), CndMessages.deleteChildNodeDialogTitle, JcrUiUtils.getCndEditorImage(),
NLS.bind(CndMessages.deleteChildNodeDialogMessage, name))) {
- getSelectedNodeType().removeChildNodeDefinition(childNodeDefinition);
+ if (!getSelectedNodeType().removeChildNodeDefinition(childNodeDefinition)) {
+ MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorDeletingChildNode, name));
+ }
}
}
@@ -1688,7 +1722,10 @@
// show confirmation dialog
if (MessageFormDialog.openQuestion(getShell(), CndMessages.deleteNamespaceDialogTitle, JcrUiUtils.getCndEditorImage(),
NLS.bind(CndMessages.deleteNamespaceDialogMessage, prefix))) {
- getCnd().removeNamespaceMapping(namespaceMapping);
+ if (!getCnd().removeNamespaceMapping(namespaceMapping)) {
+ MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorDeletingNamespace, prefix));
+ }
}
}
@@ -1705,7 +1742,10 @@
// show confirmation dialog
if (MessageFormDialog.openQuestion(getShell(), CndMessages.deleteNodeTypeDialogTitle, JcrUiUtils.getCndEditorImage(),
NLS.bind(CndMessages.deleteNodeTypeDialogMessage, name))) {
- getCnd().removeNodeTypeDefinition(nodeTypeDefinition);
+ if (!getCnd().removeNodeTypeDefinition(nodeTypeDefinition)) {
+ MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorDeletingNodeType, name));
+ }
}
}
@@ -1723,7 +1763,10 @@
// show confirmation dialog
if (MessageFormDialog.openQuestion(getShell(), CndMessages.deletePropertyDialogTitle, JcrUiUtils.getCndEditorImage(),
NLS.bind(CndMessages.deletePropertyDialogMessage, name))) {
- getSelectedNodeType().removePropertyDefinition(propertyDefinition);
+ if (!getSelectedNodeType().removePropertyDefinition(propertyDefinition)) {
+ MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorDeletingProperty, name));
+ }
}
}
@@ -1741,7 +1784,10 @@
// show confirmation dialog
if (MessageFormDialog.openQuestion(getShell(), CndMessages.deleteSuperTypeDialogTitle, JcrUiUtils.getCndEditorImage(),
NLS.bind(CndMessages.deleteSuperTypeDialogMessage, superTypeName))) {
- getSelectedNodeType().removeSuperType(superTypeName);
+ if (!getSelectedNodeType().removeSuperType(superTypeName)) {
+ MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorDeletingSupertype, superTypeName));
+ }
}
}
@@ -1749,16 +1795,35 @@
assert (getSelectedNodeType() != null) : "edit child node handler called but there is no selected node type"; //$NON-NLS-1$
assert (getSelectedChildNode() != null) : "edit child node handler has been called when there is no child node selected"; //$NON-NLS-1$
- ChildNodeDefinition childNodeBeingEdited = getSelectedChildNode();
- ChildNodeDialog dialog = new ChildNodeDialog(getShell(), getChildNodeNames(), getNamespacePrefixes(), childNodeBeingEdited);
+ final ChildNodeDefinition childNodeBeingEdited = getSelectedChildNode();
+ final ChildNodeDialog dialog = new ChildNodeDialog(getShell(),
+ getChildNodeNames(),
+ getNamespacePrefixes(),
+ childNodeBeingEdited);
dialog.create();
dialog.getShell().pack();
if (dialog.open() == Window.OK) {
- NodeTypeDefinition nodeTypeDefinition = getSelectedNodeType();
- ChildNodeDefinition newChildNodeDefinition = dialog.getChildNodeDefinition();
- nodeTypeDefinition.removeChildNodeDefinition(childNodeBeingEdited);
- nodeTypeDefinition.addChildNodeDefinition(newChildNodeDefinition);
+ final NodeTypeDefinition nodeTypeDefinition = getSelectedNodeType();
+ final ChildNodeDefinition newChildNodeDefinition = dialog.getChildNodeDefinition();
+ boolean removed = false;
+ boolean added = false;
+
+ if (nodeTypeDefinition.removeChildNodeDefinition(childNodeBeingEdited)) {
+ removed = true;
+
+ if (nodeTypeDefinition.addChildNodeDefinition(newChildNodeDefinition)) {
+ added = true;
+ }
+ }
+
+ if (!removed || !added) {
+ MessageFormDialog.openError(getShell(),
+ UiMessages.errorDialogTitle,
+ JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorEditingChildNode,
+ new Object[] { childNodeBeingEdited.getName(), removed, added }));
+ }
}
}
@@ -1797,16 +1862,40 @@
}
}
- void handleEditNodeType() {
- assert (getSelectedNodeType() != null) : "Edit node type handler has been called when there is no node type selected"; //$NON-NLS-1$
- // TODO handleEditNodeType
- MessageFormDialog.openInfo(getShell(), "Not Implemented Yet", null, "method has not be implemented"); //$NON-NLS-1$ //$NON-NLS-2$
- }
-
void handleEditProperty() {
+ assert (getSelectedNodeType() != null) : "Edit property handler called but there is no selected node type"; //$NON-NLS-1$
assert (getSelectedProperty() != null) : "Edit property handler has been called when there is no property selected"; //$NON-NLS-1$
- // TODO handleEditProperty
- MessageFormDialog.openInfo(getShell(), "Not Implemented Yet", null, "method has not be implemented"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ final PropertyDefinition propertyBeingEdited = getSelectedProperty();
+ final PropertyDialog dialog = new PropertyDialog(getShell(),
+ getPropertyNames(),
+ getNamespacePrefixes(),
+ propertyBeingEdited);
+ dialog.create();
+ dialog.getShell().pack();
+
+ if (dialog.open() == Window.OK) {
+ final NodeTypeDefinition nodeTypeDefinition = getSelectedNodeType();
+ final PropertyDefinition newPropertyDefinition = dialog.getPropertyDefinition();
+ boolean removed = false;
+ boolean added = false;
+
+ if (nodeTypeDefinition.removePropertyDefinition(propertyBeingEdited)) {
+ removed = true;
+
+ if (nodeTypeDefinition.addPropertyDefinition(newPropertyDefinition)) {
+ added = true;
+ }
+ }
+
+ if (!removed || !added) {
+ MessageFormDialog.openError(getShell(),
+ UiMessages.errorDialogTitle,
+ JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorEditingProperty, new Object[] {
+ propertyBeingEdited.getName(), removed, added }));
+ }
+ }
}
void handleEditSuperType() {
@@ -1851,23 +1940,6 @@
getSelectedNodeType().setMixin(newValue);
}
- /**
- * @param newQualifier the new node type definition qualifier/prefix (can be <code>null</code> or empty
- */
- protected void handleNameQualifierChanged( String newQualifier ) {
- if (!Utils.isEmpty(newQualifier) && (getSelectedNodeType() != null)) {
- final String name = this.txtName.getText();
-
- // if prefix indicates no qualifier should be used just use the name otherwise use prefix and name
- if (CndMessages.noNameQualifierChoice.equals(newQualifier)) {
- newQualifier = Utils.EMPTY_STRING;
- }
-
- final String newName = new QualifiedName(newQualifier, name).get();
- getSelectedNodeType().setName(newName);
- }
- }
-
void handleNamespaceSelected() {
// update button enablements
final boolean enable = (getSelectedNamespace() != null);
@@ -1885,15 +1957,7 @@
void handleNodeTypeNameChanged( final String newNodeTypeName ) {
if (getSelectedNodeType() != null) {
- String qualifier = this.cbxNamePrefix.getText();
-
- // if prefix indicates no qualifier should be used just use the name otherwise use prefix and name
- if (CndMessages.noNameQualifierChoice.equals(qualifier)) {
- qualifier = Utils.EMPTY_STRING;
- }
-
- final String newName = new QualifiedName(qualifier, newNodeTypeName).get();
- getSelectedNodeType().setName(newName);
+ getSelectedNodeType().setName(newNodeTypeName);
}
}
@@ -1917,24 +1981,12 @@
name = Messages.missingName;
}
+ this.nameEditor.setNameBeingEdited(getSelectedNodeType().getQualifiedName());
this.detailsSection.setDescription(NLS.bind(CndMessages.cndEditorChildNodeSectionDescriptionWithNodeTypeName, name));
this.propertiesSection.setDescription(NLS.bind(CndMessages.cndEditorChildNodeSectionDescriptionWithNodeTypeName, name));
this.childNodeSection.setDescription(NLS.bind(CndMessages.cndEditorPropertySectionDescriptionWithNodeTypeName, name));
}
- // update button enablements
- final boolean enable = (getSelectedNodeType() != null);
-
- // this.addNodeType always enabled
-
- if (this.editNodeType.isEnabled() != enable) {
- this.editNodeType.setEnabled(enable);
- }
-
- if (this.deleteNodeType.isEnabled() != enable) {
- this.deleteNodeType.setEnabled(enable);
- }
-
// populate details section
refreshNameControls();
refreshAttributeControls();
@@ -1959,27 +2011,34 @@
return;
}
- // TODO implement handlePropertyChanged
+ final Object source = e.getSource();
final String propName = e.getPropertyName();
- if (NodeTypeDefinition.PropertyName.ABSTRACT.toString().equals(propName)) {
-
- } else if (NodeTypeDefinition.PropertyName.CHILD_NODES.toString().equals(propName)) {
-
- } else if (NodeTypeDefinition.PropertyName.MIXIN.toString().equals(propName)) {
-
- } else if (NodeTypeDefinition.PropertyName.NAME.toString().equals(propName)) {
-
- } else if (NodeTypeDefinition.PropertyName.ORDERABLE.toString().equals(propName)) {
-
- } else if (NodeTypeDefinition.PropertyName.PRIMARY_ITEM.toString().equals(propName)) {
- // TODO primary item has not been code for in this class yet
- } else if (NodeTypeDefinition.PropertyName.PROPERTY_DEFINITIONS.toString().equals(propName)) {
-
- } else if (NodeTypeDefinition.PropertyName.QUERYABLE.toString().equals(propName)) {
-
- } else if (NodeTypeDefinition.PropertyName.SUPERTYPES.toString().equals(propName)) {
-
+ if (source instanceof NodeTypeDefinition) {
+ if (NodeTypeDefinition.PropertyName.ABSTRACT.toString().equals(propName)
+ || NodeTypeDefinition.PropertyName.MIXIN.toString().equals(propName)
+ || NodeTypeDefinition.PropertyName.ORDERABLE.toString().equals(propName)
+ || NodeTypeDefinition.PropertyName.QUERYABLE.toString().equals(propName)
+ || NodeTypeDefinition.PropertyName.PRIMARY_ITEM.toString().equals(propName)) {
+ validateAttributes();
+ } else if (NodeTypeDefinition.PropertyName.CHILD_NODES.toString().equals(propName)) {
+ validateChildNodes();
+ this.childNodeViewer.refresh();
+ } else if (NodeTypeDefinition.PropertyName.NAME.toString().equals(propName)) {
+ validateName();
+ } else if (NodeTypeDefinition.PropertyName.PROPERTY_DEFINITIONS.toString().equals(propName)) {
+ validateProperties();
+ this.propertyViewer.refresh();
+ } else if (NodeTypeDefinition.PropertyName.SUPERTYPES.toString().equals(propName)) {
+ validateSuperTypes();
+ this.superTypesViewer.refresh();
+ }
+ } else if (source instanceof NamespaceMapping) {
+ this.namespaceViewer.refresh(source);
+ } else if (source instanceof PropertyDefinition) {
+ this.propertyViewer.refresh(source);
+ } else if (source instanceof ChildNodeDefinition) {
+ this.childNodeViewer.refresh(source);
}
}
@@ -2078,60 +2137,20 @@
if (this.childNodeViewer != null) {
this.childNodeViewer.setInput(this);
UiUtils.pack(this.childNodeViewer);
- validateChildNodeDefinitions();
+ validateChildNodes();
}
}
private void refreshNameControls() {
final NodeTypeDefinition nodeTypeDefinition = getSelectedNodeType();
- if ((nodeTypeDefinition == null) || Utils.isEmpty(nodeTypeDefinition.getName())) {
- this.cbxNamePrefix.removeAll();
- this.txtName.setText(Utils.EMPTY_STRING);
+ if (nodeTypeDefinition == null) {
+ this.nameEditor.setNameBeingEdited(null);
} else {
- // load qualifiers with namespace prefixes
- final List<NamespaceMapping> namespaceMappings = getCnd().getNamespaceMappings();
- final List<String> prefixes = new ArrayList<String>(namespaceMappings.size() + 1); // add one for empty qualifier
- prefixes.add(CndMessages.noNameQualifierChoice);
-
- for (final NamespaceMapping namespaceMapping : namespaceMappings) {
- prefixes.add(namespaceMapping.getPrefix());
- }
-
- // set qualifier choices if they have changed
- final String[] currentItems = this.cbxNamePrefix.getItems();
-
- // only reload qualifiers if different
- if ((prefixes.size() != currentItems.length) || !prefixes.containsAll(Arrays.asList(currentItems))) {
- this.cbxNamePrefix.setItems(prefixes.toArray(new String[prefixes.size()]));
- }
-
- // load name
- final String name = nodeTypeDefinition.getName();
- final QualifiedName qname = QualifiedName.parse(name);
-
- // set qualifier
- final String qualifier = ((qname.getQualifier() == null) ? Utils.EMPTY_STRING : qname.getQualifier());
-
- if (!Utils.isEmpty(qualifier)) {
- int index = this.cbxNamePrefix.indexOf(qualifier);
-
- if (index == -1) {
- index = this.cbxNamePrefix.getItemCount();
- this.cbxNamePrefix.add(qualifier);
- this.cbxNamePrefix.select(index);
- } else if (this.cbxNamePrefix.getSelectionIndex() != index) { // only select if currently not selected
- this.cbxNamePrefix.select(index);
- }
- }
-
- // set unqualified name
- final String unqualifiedName = ((qname.getUnqualifiedName() == null) ? Utils.EMPTY_STRING : qname.getUnqualifiedName());
-
- // only set text field if different
- if (!this.txtName.getText().equals(unqualifiedName)) {
- this.txtName.setText(unqualifiedName);
- }
+ // load name editor with current namespace prefixes, current node type names, and selected node type name
+ this.nameEditor.setNameBeingEdited(nodeTypeDefinition.getQualifiedName());
+ this.nameEditor.setValidQualifiers(getNamespacePrefixes());
+ this.nameEditor.setExistingQNames(getNodeTypeNames());
}
}
@@ -2168,7 +2187,7 @@
*/
@Override
protected void updateAllMessages() {
- validateChildNodeDefinitions();
+ validateChildNodes();
validateNamespaces();
validateNodeTypes();
validateProperties();
@@ -2212,24 +2231,16 @@
this.nodeTypeViewer.getTable().setEnabled(cndWritable);
}
- if (this.editNodeType.isEnabled() != enableWithNodeTypeSelected) {
- this.editNodeType.setEnabled(enableWithNodeTypeSelected);
- }
-
if (this.deleteNodeType.isEnabled() != enableWithNodeTypeSelected) {
this.deleteNodeType.setEnabled(enableWithNodeTypeSelected);
}
}
{ // details section
- if (this.cbxNamePrefix.isEnabled() != enableWithNodeTypeSelected) {
- this.cbxNamePrefix.setEnabled(enableWithNodeTypeSelected);
+ if (this.nameEditor.isEnabled() != enableWithNodeTypeSelected) {
+ this.nameEditor.setEnabled(enableWithNodeTypeSelected);
}
- if (this.txtName.isEnabled() != enableWithNodeTypeSelected) {
- this.txtName.setEnabled(enableWithNodeTypeSelected);
- }
-
if (this.btnAbstract.isEnabled() != enableWithNodeTypeSelected) {
this.btnAbstract.setEnabled(enableWithNodeTypeSelected);
}
@@ -2306,24 +2317,56 @@
}
}
- private void validateChildNodeDefinitions() {
+ private void updateMessage( final ValidationStatus status,
+ final ErrorMessage errorMessage ) {
+ final IMessageManager msgMgr = getCndEditor().getMessageManager();
+ JcrUiUtils.setMessage(status, errorMessage);
+
+ if (errorMessage.isOk()) {
+ if (errorMessage.getControl() == null) {
+ msgMgr.removeMessage(errorMessage.getKey());
+ } else {
+ msgMgr.removeMessage(errorMessage.getKey(), errorMessage.getControl());
+ }
+ } else {
+ if (errorMessage.getControl() == null) {
+ msgMgr.addMessage(errorMessage.getKey(), errorMessage.getMessage(), errorMessage.getData(),
+ errorMessage.getMessageType());
+ } else {
+ msgMgr.addMessage(errorMessage.getKey(), errorMessage.getMessage(), errorMessage.getData(),
+ errorMessage.getMessageType(), errorMessage.getControl());
+ }
+ }
+ }
+
+ private void validateAttributes() {
+ // TODO primary item
+ }
+
+ private void validateChildNodes() {
final NodeTypeDefinition nodeTypeDefinition = getSelectedNodeType();
if (nodeTypeDefinition == null) {
this.nodeTypesError.setOkMessage(null);
} else {
- // CndValidator.validateChildNodeDefinitions(nodeTypeDefinition.getChildNodeDefinitions());
+ final MultiValidationStatus status = CndValidator.validateChildNodeDefinitions(nodeTypeDefinition.getName(),
+ nodeTypeDefinition.getChildNodeDefinitions());
+ updateMessage(status, this.nodeTypesError);
}
}
+ private void validateName() {
+ updateMessage(this.nameEditor.getStatus(), this.nodeTypeNameError);
+ }
+
private void validateNamespaces() {
final MultiValidationStatus status = CndValidator.validateNamespaceMappings(getCnd().getNamespaceMappings());
- JcrUiUtils.setMessage(status, this.namespacesError);
+ updateMessage(status, this.namespacesError);
}
private void validateNodeTypes() {
final MultiValidationStatus status = CndValidator.validateNodeTypeDefinitions(getCnd().getNodeTypeDefinitions());
- JcrUiUtils.setMessage(status, this.nodeTypesError);
+ updateMessage(status, this.nodeTypesError);
}
private void validateProperties() {
@@ -2334,7 +2377,7 @@
} else {
final MultiValidationStatus status = CndValidator.validatePropertyDefinitions(nodeTypeDefinition.getName(),
nodeTypeDefinition.getPropertyDefinitions());
- JcrUiUtils.setMessage(status, this.propertiesError);
+ updateMessage(status, this.propertiesError);
}
}
@@ -2353,7 +2396,7 @@
final MultiValidationStatus status = CndValidator.validateSuperTypes(nodeTypeName,
nodeTypeDefinition.getState(PropertyName.SUPERTYPES),
nodeTypeDefinition.getDeclaredSupertypeNames());
- JcrUiUtils.setMessage(status, this.superTypesError);
+ updateMessage(status, this.superTypesError);
}
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndMessages.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndMessages.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/CndMessages.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -26,6 +26,12 @@
public static String abstractAttributeToolTip;
/**
+ * A dialog message indicating the default value has been changed and asks the user to OK the dialog. One parameter, the default
+ * value, is required.
+ */
+ public static String acceptDefaultValueDialogMsg;
+
+ /**
* A dialog message indicating the namespace mapping has been changed and asks the user to OK the dialog.
*/
public static String acceptNamespaceDialogMsg;
@@ -37,6 +43,12 @@
public static String acceptQualifiedNameDialogMsg;
/**
+ * A dialog message indicating the value constraint has been changed and asks the user to OK the dialog. One parameter, the
+ * value constraint, is required.
+ */
+ public static String acceptValueConstraintDialogMsg;
+
+ /**
* The context menu item text for the add child node definition action.
*/
public static String addChildNodeMenuText;
@@ -47,6 +59,16 @@
public static String addChildNodeToolTip;
/**
+ * The context menu item text for the add default value action.
+ */
+ public static String addDefaultValueMenuText;
+
+ /**
+ * The tool tip message of the add default value action.
+ */
+ public static String addDefaultValueToolTip;
+
+ /**
* The context menu item text for the add namespace mapping action.
*/
public static String addNamespaceMenuText;
@@ -97,6 +119,16 @@
public static String addSuperTypeToolTip;
/**
+ * The context menu item text for the add value constraint action.
+ */
+ public static String addValueConstraintMenuText;
+
+ /**
+ * The tool tip message of the add value constraint action.
+ */
+ public static String addValueConstraintToolTip;
+
+ /**
* The column header text for attributes.
*/
public static String attributesHeaderText;
@@ -277,11 +309,46 @@
public static String defaultTypeHeaderText;
/**
+ * The message area title of the default value dialog when creating a new default value.
+ */
+ public static String defaultValueDialogCreateMsg;
+
+ /**
+ * The message area title of the default value dialog when an existing default value is being edited.
+ */
+ public static String defaultValueDialogEditMsg;
+
+ /**
+ * The message displayed in the default value dialog when first displayed.
+ */
+ public static String defaultValueDialogMsg;
+
+ /**
+ * A label for a default value control.
+ */
+ public static String defaultValueLabel;
+
+ /**
* The column header text of the default values of a property definition.
*/
public static String defaultValuesHeaderText;
/**
+ * A label for a default values control.
+ */
+ public static String defaultValuesLabel;
+
+ /**
+ * A tool tip message of a property definition's default value.
+ */
+ public static String defaultValuesToolTip;
+
+ /**
+ * A tool tip message for one default value of a property definition.
+ */
+ public static String defaultValueToolTip;
+
+ /**
* The question message of the dialog for deleting a child node definition. One parameter, the child node definition name, is
* required.
*/
@@ -303,6 +370,26 @@
public static String deleteChildNodeToolTip;
/**
+ * The question message of the dialog for deleting a default value. One parameter, the default value, is required.
+ */
+ public static String deleteDefaultValueDialogMessage;
+
+ /**
+ * The title of the dialog for deleting a default value.
+ */
+ public static String deleteDefaultValueDialogTitle;
+
+ /**
+ * The context menu item text for the delete default value action.
+ */
+ public static String deleteDefaultValueMenuText;
+
+ /**
+ * The tool tip message of the delete default value action.
+ */
+ public static String deleteDefaultValueToolTip;
+
+ /**
* The question message of the dialog for deleting a namespace mapping. One parameter, the namespace prefix, is required.
*/
public static String deleteNamespaceDialogMessage;
@@ -405,6 +492,26 @@
public static String deleteSuperTypeToolTip;
/**
+ * The question message of the dialog for deleting a value constraint. One parameter, the value constraint, is required.
+ */
+ public static String deleteValueConstraintDialogMessage;
+
+ /**
+ * The title of the dialog for deleting a value constraint.
+ */
+ public static String deleteValueConstraintDialogTitle;
+
+ /**
+ * The context menu item text for the delete value constraint action.
+ */
+ public static String deleteValueConstraintMenuText;
+
+ /**
+ * The tool tip message of the delete value constraint action.
+ */
+ public static String deleteValueConstraintToolTip;
+
+ /**
* The context menu item text for the edit child node definition action.
*/
public static String editChildNodeMenuText;
@@ -415,6 +522,16 @@
public static String editChildNodeToolTip;
/**
+ * The context menu item text for the edit default value action.
+ */
+ public static String editDefaultValueMenuText;
+
+ /**
+ * The tool tip message of the edit default value action.
+ */
+ public static String editDefaultValueToolTip;
+
+ /**
* The namespace editor dialog message area title when editing an existing namespace mapping.
*/
public static String editNamespaceDialogTitle;
@@ -480,12 +597,46 @@
public static String editSuperTypeToolTip;
/**
+ * The context menu item text for the edit value constraint action.
+ */
+ public static String editValueConstraintMenuText;
+
+ /**
+ * The tool tip message of the edit value constraint action.
+ */
+ public static String editValueConstraintToolTip;
+
+ /**
+ * An error message indicating the new child node definition was not added to the node type definition. One parameter, the child
+ * definition name, is required.
+ */
+ public static String errorAddingChildNode;
+
+ /**
+ * An error message indicating the new default value was not added to the property definition. One parameter, the default value,
+ * is required.
+ */
+ public static String errorAddingDefaultValue;
+
+ /**
* An error message indicating the new namespace mapping was not added to the CND. One parameter, the namespace mapping, is
* required.
*/
public static String errorAddingNamespaceMapping;
/**
+ * An error message indicating the new node type definition was not added to the CND. One parameter, the node type definition
+ * name, is required.
+ */
+ public static String errorAddingNodeType;
+
+ /**
+ * An error message indicating the new property definition was not added to the node type definition. One parameter, the
+ * property name, is required.
+ */
+ public static String errorAddingProperty;
+
+ /**
* An error message indicating the new required type was not added to the child node definition. One parameter, the required
* type, is required.
*/
@@ -498,12 +649,78 @@
public static String errorAddingSupertype;
/**
+ * An error message indicating the new value constraint was not added to the property definition. One parameter, the value
+ * constraint, is required.
+ */
+ public static String errorAddingValueConstraint;
+
+ /**
+ * An error message indicating deleting the child node definition did not get saved. One parameter, the child node definition
+ * name, is required.
+ */
+ public static String errorDeletingChildNode;
+
+ /**
+ * An error message indicating deleting the default value did not get saved. One parameter, the default value, is required.
+ */
+ public static String errorDeletingDefaultValue;
+
+ /**
+ * An error message indicating deleting the namespace mapping did not get saved. One parameter, the namespace prefix, is
+ * required.
+ */
+ public static String errorDeletingNamespace;
+
+ /**
+ * An error message indicating deleting the node type definition did not get saved. One parameter, the node type definition
+ * name, is required.
+ */
+ public static String errorDeletingNodeType;
+
+ /**
+ * An error message indicating deleting the property definition did not get saved. One parameter, the property definition name,
+ * is required.
+ */
+ public static String errorDeletingProperty;
+
+ /**
+ * An error message indicating deleting the supertype did not get saved. One parameter, the supertype name, is required.
+ */
+ public static String errorDeletingSupertype;
+
+ /**
+ * An error message indicating deleting the value constraint did not get saved. One parameter, the value constraint, is
+ * required.
+ */
+ public static String errorDeletingValueConstraint;
+
+ /**
+ * An error message indicating the updated child node definition did not get saved to the node type definition. Three
+ * parameters, the child node definition name, a flag indicating if the remove succeeded, and a flag indicating if the add
+ * succeeded, are required.
+ */
+ public static String errorEditingChildNode;
+
+ /**
+ * An error message indicating the updated default value did not get saved to the CND. Three parameters, the default value, a
+ * flag indicating if the remove succeeded, and a flag indicating if the add succeeded, are required.
+ */
+ public static String errorEditingDefaultValue;
+
+ /**
* An error message indicating the updated namespace mapping did not get saved to the CND. Three parameters, the namespace
* mapping, a flag indicating if the remove succeeded, and a flag indicating if the add succeeded, are required.
*/
public static String errorEditingNamespaceMapping;
/**
+ * An error message indicating the updated property definition did not get saved to the node type definition. Three parameters,
+ * the property definition name, a flag indicating if the remove succeeded, and a flag indicating if the add succeeded, are
+ * required.
+ */
+ public static String errorEditingProperty;
+
+ /**
* An error message indicating the updated required type did not get saved to the CND. Three parameters, the required type, a
* flag indicating if the remove succeeded, and a flag indicating if the add succeeded, are required.
*/
@@ -516,6 +733,12 @@
public static String errorEditingSupertype;
/**
+ * An error message indicating the updated value constraint did not get saved to the CND. Three parameters, the value
+ * constraint, a flag indicating if the remove succeeded, and a flag indicating if the add succeeded, are required.
+ */
+ public static String errorEditingValueConstraint;
+
+ /**
* The error message when the CND editor could not be opened.
*/
public static String errorOpeningCndEditor;
@@ -546,6 +769,16 @@
public static String mixinAttributeToolTip;
/**
+ * A name for the multiple attribute suitable for a radio or check button.
+ */
+ public static String multipleAttribute;
+
+ /**
+ * A tool tip message of the property definition's multiple attribute.
+ */
+ public static String multipleAttributeToolTip;
+
+ /**
* The column header text for a generic name property or attribute.
*/
public static String nameHeaderText;
@@ -601,6 +834,11 @@
public static String newNamespaceDialogTitle;
/**
+ * The qualified name editor dialog message area title when creating a new node type definition.
+ */
+ public static String newNodeTypeDialogTitle;
+
+ /**
* The qualified name editor dialog message area title when creating a new required type.
*/
public static String newRequiredTypeDialogTitle;
@@ -626,11 +864,31 @@
public static String nodeTypeNameToolTip;
/**
+ * A name for the noFullText attribute suitable for a radio or check button.
+ */
+ public static String noFullTextAttribute;
+
+ /**
+ * A tool tip message of the property definition's noFullText attribute.
+ */
+ public static String noFullTextAttributeToolTip;
+
+ /**
* The text indicating the qualified name does not have a qualifier.
*/
public static String noNameQualifierChoice;
/**
+ * A name for the noQueryOrder attribute suitable for a radio or check button.
+ */
+ public static String noQueryOrderAttribute;
+
+ /**
+ * A tool tip message of the property definition's noQueryOrder attribute.
+ */
+ public static String noQueryOrderAttributeToolTip;
+
+ /**
* A label for an on parent version attribute control.
*/
public static String onParentVersionLabel;
@@ -661,6 +919,26 @@
public static String propertyDefaultValuesToolTip;
/**
+ * The message area title of the property definition dialog when creating a new property.
+ */
+ public static String propertyDialogCreateTitle;
+
+ /**
+ * The message area title of the property definition dialog when an existing property is being edited.
+ */
+ public static String propertyDialogEditTitle;
+
+ /**
+ * The message displayed in the property dialog when first displayed.
+ */
+ public static String propertyDialogMsg;
+
+ /**
+ * The title of the property definition dialog.
+ */
+ public static String propertyDialogTitle;
+
+ /**
* The tool tip for a property definition name.
*/
public static String propertyNameToolTip;
@@ -737,11 +1015,21 @@
public static String supertypesLabel;
/**
+ * A tool tip message of a node type definition's supertypes property.
+ */
+ public static String supertypesToolTip;
+
+ /**
* The column header text for a type.
*/
public static String typeHeaderText;
/**
+ * A label for a type control.
+ */
+ public static String typeLabel;
+
+ /**
* A tooltip message for the control where the name of the qualified name is being edited.
*/
public static String unqualifiedNameToolTip;
@@ -752,10 +1040,50 @@
public static String validQualifiersToolTip;
/**
+ * The message area title of the value constraint dialog when creating a new value constraint.
+ */
+ public static String valueConstraintDialogCreateMsg;
+
+ /**
+ * The message area title of the value constraint dialog when an existing value constraint is being edited.
+ */
+ public static String valueConstraintDialogEditMsg;
+
+ /**
+ * The message displayed in the value constraint dialog when first displayed.
+ */
+ public static String valueConstraintDialogMsg;
+
+ /**
+ * A label for a value constraint control.
+ */
+ public static String valueConstraintLabel;
+
+ /**
* The column header text for the value constraints of a property definition.
*/
public static String valueConstraintsHeaderText;
+ /**
+ * A label for a value constraints control.
+ */
+ public static String valueConstraintsLabel;
+
+ /**
+ * A tool tip message of a property definition's value constraints.
+ */
+ public static String valueConstraintsToolTip;
+
+ /**
+ * A tool tip message for one value constraint of a property definition.
+ */
+ public static String valueConstraintToolTip;
+
+ /**
+ * The title of the string value editor dialog.
+ */
+ public static String valueEditorDialogTitle;
+
static {
NLS.initializeMessages("org.jboss.tools.modeshape.jcr.ui.cnd.cndMessages", CndMessages.class); //$NON-NLS-1$
}
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/NamespaceMappingDialog.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/NamespaceMappingDialog.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/NamespaceMappingDialog.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -38,7 +38,7 @@
/**
* The <code>NamespaceMappingDialog</code> is used to create or edit a namespace mapping.
*/
-class NamespaceMappingDialog extends FormDialog {
+final class NamespaceMappingDialog extends FormDialog {
private Button btnOk;
Added: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/PropertyDialog.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/PropertyDialog.java (rev 0)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/PropertyDialog.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -0,0 +1,1315 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ *
+ * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
+ *
+ * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
+ */
+package org.jboss.tools.modeshape.jcr.ui.cnd;
+
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.ToolBarManager;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.forms.FormDialog;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.jboss.tools.modeshape.jcr.Messages;
+import org.jboss.tools.modeshape.jcr.Utils;
+import org.jboss.tools.modeshape.jcr.ValidationStatus;
+import org.jboss.tools.modeshape.jcr.cnd.CndValidator;
+import org.jboss.tools.modeshape.jcr.cnd.PropertyDefinition;
+import org.jboss.tools.modeshape.jcr.cnd.PropertyDefinition.PropertyName;
+import org.jboss.tools.modeshape.jcr.cnd.QualifiedName;
+import org.jboss.tools.modeshape.jcr.cnd.attributes.OnParentVersion;
+import org.jboss.tools.modeshape.jcr.cnd.attributes.PropertyType;
+import org.jboss.tools.modeshape.jcr.ui.Activator;
+import org.jboss.tools.modeshape.jcr.ui.JcrUiConstants;
+import org.jboss.tools.modeshape.jcr.ui.JcrUiUtils;
+import org.jboss.tools.modeshape.ui.UiMessages;
+import org.jboss.tools.modeshape.ui.actions.DelegateAction;
+import org.jboss.tools.modeshape.ui.forms.ErrorMessage;
+import org.jboss.tools.modeshape.ui.forms.FormUtils;
+import org.jboss.tools.modeshape.ui.forms.FormUtils.Styles;
+import org.jboss.tools.modeshape.ui.forms.MessageFormDialog;
+
+/**
+ * A dialog used to create and edit {@link PropertyDefinition}s.
+ */
+final class PropertyDialog extends FormDialog {
+
+ private IAction addDefaultValue;
+ private IAction addValueConstraint;
+ private Button btnOk;
+ private final ErrorMessage defaultValuesError;
+ private TableViewer defaultValuesViewer;
+ private IAction deleteDefaultValue;
+ private IAction deleteValueConstraint;
+ private IAction editDefaultValue;
+ private IAction editValueConstraint;
+ /**
+ * The existing namespace prefixes contained in the CND (never <code>null</code> but can be empty).
+ */
+ private final Collection<String> existingNamespacePrefixes;
+ /**
+ * The existing child node definition names contained in the CND (never <code>null</code> but can be empty).
+ */
+ private final Collection<QualifiedName> existingPropertyNames;
+ private QualifiedNameEditor nameEditor;
+ private final ErrorMessage nameError;
+ private PropertyDefinition originalProperty;
+ private PropertyDefinition propertyBeingEdited;
+ private ScrolledForm scrolledForm;
+ private final ErrorMessage valueConstraintsError;
+ private TableViewer valueConstraintsViewer;
+
+ /**
+ * Used to create a new property definition.
+ *
+ * @param parentShell the parent shell (can be <code>null</code>)
+ * @param existingPropertyNames the existing property names (can be <code>null</code> or empty)
+ * @param existingNamespacePrefixes the existing CND namespace prefixes (can be <code>null</code> or empty)
+ */
+ public PropertyDialog( final Shell parentShell,
+ final Collection<QualifiedName> existingPropertyNames,
+ final Collection<String> existingNamespacePrefixes ) {
+ super(parentShell);
+ this.existingPropertyNames = ((existingPropertyNames == null) ? Collections.<QualifiedName> emptyList()
+ : new ArrayList<QualifiedName>(existingPropertyNames));
+ this.existingNamespacePrefixes = ((existingNamespacePrefixes == null) ? Collections.<String> emptyList()
+ : new ArrayList<String>(existingNamespacePrefixes));
+ this.defaultValuesError = new ErrorMessage();
+ this.nameError = new ErrorMessage();
+ this.valueConstraintsError = new ErrorMessage();
+ this.propertyBeingEdited = new PropertyDefinition();
+ }
+
+ /**
+ * Used to edit a property definition.
+ *
+ * @param parentShell the parent shell (can be <code>null</code>)
+ * @param existingPropertyNames the existing property names (can be <code>null</code> or empty)
+ * @param existingNamespacePrefixes the existing CND namespace prefixes (can be <code>null</code> or empty)
+ * @param propertyDefinitionBeingEdited the proeprty definition being edited (cannot be <code>null</code>)
+ */
+ public PropertyDialog( final Shell parentShell,
+ final Collection<QualifiedName> existingPropertyNames,
+ final Collection<String> existingNamespacePrefixes,
+ final PropertyDefinition propertyDefinitionBeingEdited ) {
+ this(parentShell, existingPropertyNames, existingNamespacePrefixes);
+
+ Utils.verifyIsNotNull(propertyDefinitionBeingEdited, "propertyDefinitionBeingEdited"); //$NON-NLS-1$
+ this.originalProperty = propertyDefinitionBeingEdited;
+
+ // create copy of property being edited
+ this.propertyBeingEdited = PropertyDefinition.copy(this.originalProperty);
+
+ // remove name from existing names so that validation won't show it as a duplicate
+ if (!Utils.isEmpty(this.propertyBeingEdited.getName())) {
+ this.existingPropertyNames.remove(this.propertyBeingEdited.getQualifiedName());
+ }
+ }
+
+ PropertyDefinition accessModel() {
+ return this.propertyBeingEdited;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
+ */
+ @Override
+ protected void configureShell( final Shell newShell ) {
+ super.configureShell(newShell);
+ newShell.setText(CndMessages.propertyDialogTitle);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#createButton(org.eclipse.swt.widgets.Composite, int, java.lang.String, boolean)
+ */
+ @Override
+ protected Button createButton( final Composite parent,
+ final int id,
+ final String label,
+ final boolean defaultButton ) {
+ final Button btn = super.createButton(parent, id, label, defaultButton);
+
+ if (id == IDialogConstants.OK_ID) {
+ // disable OK button initially
+ this.btnOk = btn;
+ btn.setEnabled(false);
+ }
+
+ return btn;
+ }
+
+ void createDefaultValuesActions() {
+ this.addDefaultValue = new Action(Utils.EMPTY_STRING) {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ handleAddDefaultValue();
+ }
+ };
+ this.addDefaultValue.setToolTipText(CndMessages.addDefaultValueToolTip);
+ this.addDefaultValue.setImageDescriptor(JcrUiUtils.getNewImageDescriptor());
+
+ this.deleteDefaultValue = new Action(Utils.EMPTY_STRING) {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ handleDeleteDefaultValue();
+ }
+ };
+ this.deleteDefaultValue.setEnabled(false);
+ this.deleteDefaultValue.setToolTipText(CndMessages.deleteDefaultValueToolTip);
+ this.deleteDefaultValue.setImageDescriptor(JcrUiUtils.getDeleteImageDescriptor());
+
+ this.editDefaultValue = new Action(Utils.EMPTY_STRING) {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ handleEditDefaultValue();
+ }
+ };
+ this.editDefaultValue.setEnabled(false);
+ this.editDefaultValue.setToolTipText(CndMessages.editDefaultValueToolTip);
+ this.editDefaultValue.setImageDescriptor(JcrUiUtils.getEditImageDescriptor());
+ }
+
+ private void createDefaultValuesViewer( final Table defaultValuesTable ) {
+ this.defaultValuesViewer = new TableViewer(defaultValuesTable);
+ this.defaultValuesViewer.setLabelProvider(new LabelProvider());
+ this.defaultValuesViewer.setContentProvider(new IStructuredContentProvider() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
+ @Override
+ public void dispose() {
+ // nothing to do
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ */
+ @Override
+ public Object[] getElements( final Object inputElement ) {
+ final PropertyDefinition propDefn = accessModel();
+ return propDefn.getDefaultValuesAsStrings().toArray();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object,
+ * java.lang.Object)
+ */
+ @Override
+ public void inputChanged( final Viewer viewer,
+ final Object oldInput,
+ final Object newInput ) {
+ // nothing to do
+ }
+ });
+
+ this.defaultValuesViewer.addDoubleClickListener(new IDoubleClickListener() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent)
+ */
+ @Override
+ public void doubleClick( final DoubleClickEvent event ) {
+ handleEditDefaultValue();
+ }
+ });
+
+ this.defaultValuesViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ @Override
+ public void selectionChanged( final SelectionChangedEvent event ) {
+ handleDefaultValueSelected();
+ }
+ });
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.forms.FormDialog#createFormContent(org.eclipse.ui.forms.IManagedForm)
+ */
+ @Override
+ protected void createFormContent( final IManagedForm managedForm ) {
+ this.scrolledForm = managedForm.getForm();
+ this.scrolledForm.setText(isEditMode() ? CndMessages.propertyDialogEditTitle : CndMessages.propertyDialogCreateTitle);
+ this.scrolledForm.setImage(Activator.getSharedInstance().getImage(JcrUiConstants.Images.CND_EDITOR));
+ this.scrolledForm.setMessage(CndMessages.propertyDialogMsg, IMessageProvider.NONE);
+
+ final FormToolkit toolkit = managedForm.getToolkit();
+ toolkit.decorateFormHeading(this.scrolledForm.getForm());
+
+ final Composite body = this.scrolledForm.getBody();
+ body.setLayout(new GridLayout(2, false));
+
+ { // top (name editor)
+ final Composite topContainer = toolkit.createComposite(body);
+ topContainer.setLayout(new GridLayout(2, false));
+ topContainer.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+ ((GridData)topContainer.getLayoutData()).horizontalSpan = 2;
+ toolkit.paintBordersFor(topContainer);
+
+ { // name
+ this.nameEditor = new QualifiedNameEditor(topContainer,
+ SWT.NONE,
+ toolkit,
+ Messages.propertyDefinitionName,
+ this.existingNamespacePrefixes,
+ this.propertyBeingEdited.getQualifiedName());
+ ((GridData)this.nameEditor.getLayoutData()).horizontalSpan = 2;
+ this.nameEditor.addListener(SWT.Modify, new Listener() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+ */
+ @Override
+ public void handleEvent( final Event e ) {
+ handleNameChanged(e.text);
+ }
+ });
+
+ this.nameError.setControl(this.nameEditor);
+ }
+
+ { // type
+ final Label lblType = toolkit.createLabel(topContainer, CndMessages.typeLabel, SWT.NONE);
+ lblType.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
+
+ final CCombo cbxType = new CCombo(topContainer, Styles.COMBO_STYLE);
+ toolkit.adapt(cbxType, true, false);
+ cbxType.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+ ((GridData)cbxType.getLayoutData()).heightHint = cbxType.getItemHeight() + 4;
+ cbxType.setToolTipText(CndMessages.propertyTypeToolTip);
+
+ // populate property type values
+ for (final PropertyType type : PropertyType.values()) {
+ if (type != PropertyType.VARIANT) {
+ cbxType.add(type.toString());
+ }
+ }
+
+ // select the current type
+ if (isEditMode()) {
+ final String currentType = OnParentVersion.findUsingJcrValue(this.propertyBeingEdited.getOnParentVersion())
+ .toString();
+ final int index = cbxType.indexOf(currentType);
+
+ if (index == -1) {
+ // select default type
+ cbxType.setText(PropertyType.DEFAULT_VALUE.toString());
+ } else {
+ cbxType.select(index);
+ }
+ } else {
+ // select default type
+ cbxType.setText(PropertyType.DEFAULT_VALUE.toString());
+ }
+
+ cbxType.addSelectionListener(new SelectionAdapter() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected( final SelectionEvent e ) {
+ final String newOpv = ((CCombo)e.widget).getText();
+ handleTypeChanged(newOpv);
+ }
+ });
+ }
+ }
+
+ { // middle (attributes)
+ final Group attributesContainer = new Group(body, SWT.SHADOW_NONE);
+ attributesContainer.setText(CndMessages.attributesHeaderText);
+ attributesContainer.setLayout(new GridLayout(2, true));
+ final GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
+ gd.horizontalSpan = 2;
+ attributesContainer.setLayoutData(gd);
+ toolkit.adapt(attributesContainer);
+ toolkit.paintBordersFor(attributesContainer);
+
+ { // autocreated
+ final Button btnAutocreated = toolkit.createButton(attributesContainer, CndMessages.autocreatedAttribute, SWT.CHECK);
+ btnAutocreated.setBackground(attributesContainer.getBackground());
+
+ if (isEditMode() && this.propertyBeingEdited.isAutoCreated()) {
+ btnAutocreated.setSelection(true);
+ }
+
+ btnAutocreated.addSelectionListener(new SelectionAdapter() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected( final SelectionEvent e ) {
+ handleAutocreatedChanged(((Button)e.widget).getSelection());
+ }
+ });
+ btnAutocreated.setToolTipText(CndMessages.autocreatedAttributeToolTip);
+ }
+
+ { // mandatory
+ final Button btnMandatory = toolkit.createButton(attributesContainer, CndMessages.mandatoryAttribute, SWT.CHECK);
+ btnMandatory.setBackground(attributesContainer.getBackground());
+
+ if (isEditMode() && this.propertyBeingEdited.isMandatory()) {
+ btnMandatory.setSelection(true);
+ }
+
+ btnMandatory.addSelectionListener(new SelectionAdapter() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected( final SelectionEvent e ) {
+ handleMandatoryChanged(((Button)e.widget).getSelection());
+ }
+ });
+ btnMandatory.setToolTipText(CndMessages.mandatoryAttributeToolTip);
+ }
+
+ { // protected
+ final Button btnProtected = toolkit.createButton(attributesContainer, CndMessages.protectedAttribute, SWT.CHECK);
+ btnProtected.setBackground(attributesContainer.getBackground());
+
+ if (isEditMode() && this.propertyBeingEdited.isProtected()) {
+ btnProtected.setSelection(true);
+ }
+
+ btnProtected.addSelectionListener(new SelectionAdapter() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected( final SelectionEvent e ) {
+ handleProtectedChanged(((Button)e.widget).getSelection());
+ }
+ });
+ btnProtected.setToolTipText(CndMessages.protectedAttributeToolTip);
+ }
+
+ { // multiple
+ final Button btnMultiple = toolkit.createButton(attributesContainer, CndMessages.multipleAttribute, SWT.CHECK);
+ btnMultiple.setBackground(attributesContainer.getBackground());
+
+ if (isEditMode() && this.propertyBeingEdited.isMultiple()) {
+ btnMultiple.setSelection(true);
+ }
+
+ btnMultiple.addSelectionListener(new SelectionAdapter() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected( final SelectionEvent e ) {
+ handleMultipleChanged(((Button)e.widget).getSelection());
+ }
+ });
+ btnMultiple.setToolTipText(CndMessages.multipleAttributeToolTip);
+ }
+
+ { // nofulltext
+ final Button btnNoFullText = toolkit.createButton(attributesContainer, CndMessages.noFullTextAttribute, SWT.CHECK);
+ btnNoFullText.setBackground(attributesContainer.getBackground());
+
+ if (isEditMode() && !this.propertyBeingEdited.isFullTextSearchable()) {
+ btnNoFullText.setSelection(true);
+ }
+
+ btnNoFullText.addSelectionListener(new SelectionAdapter() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected( final SelectionEvent e ) {
+ handleNoFullTextChanged(((Button)e.widget).getSelection());
+ }
+ });
+ btnNoFullText.setToolTipText(CndMessages.noFullTextAttributeToolTip);
+ }
+
+ { // noQueryOrder
+ final Button btnNoQueryOrder = toolkit.createButton(attributesContainer, CndMessages.noQueryOrderAttribute,
+ SWT.CHECK);
+ btnNoQueryOrder.setBackground(attributesContainer.getBackground());
+
+ if (isEditMode() && !this.propertyBeingEdited.isQueryOrderable()) {
+ btnNoQueryOrder.setSelection(true);
+ }
+
+ btnNoQueryOrder.addSelectionListener(new SelectionAdapter() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected( final SelectionEvent e ) {
+ handleNoQueryOrderChanged(((Button)e.widget).getSelection());
+ }
+ });
+ btnNoQueryOrder.setToolTipText(CndMessages.noQueryOrderAttributeToolTip);
+ }
+
+ { // opv
+ final Composite opvContainer = toolkit.createComposite(attributesContainer);
+ opvContainer.setLayout(new GridLayout(2, false));
+ opvContainer.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true));
+ toolkit.paintBordersFor(opvContainer);
+
+ final Label lblOpv = toolkit.createLabel(opvContainer, CndMessages.onParentVersionLabel, SWT.NONE);
+ lblOpv.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
+
+ final CCombo cbxOpvs = new CCombo(opvContainer, Styles.COMBO_STYLE);
+ cbxOpvs.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+ ((GridData)cbxOpvs.getLayoutData()).heightHint = cbxOpvs.getItemHeight() + 4;
+ cbxOpvs.setToolTipText(CndMessages.onParentVersionToolTip);
+ toolkit.adapt(cbxOpvs, true, false);
+
+ // populate opv values
+ for (final OnParentVersion opv : OnParentVersion.values()) {
+ if (opv != OnParentVersion.VARIANT) {
+ cbxOpvs.add(opv.toString());
+ }
+ }
+
+ // select the current qualifier
+ if (isEditMode()) {
+ final String currentOpv = OnParentVersion.findUsingJcrValue(this.propertyBeingEdited.getOnParentVersion())
+ .toString();
+ final int index = cbxOpvs.indexOf(currentOpv);
+
+ if (index != -1) {
+ cbxOpvs.select(index);
+ }
+ }
+
+ cbxOpvs.addSelectionListener(new SelectionAdapter() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ @Override
+ public void widgetSelected( final SelectionEvent e ) {
+ final String newOpv = ((CCombo)e.widget).getText();
+ handleOnParentVersionChanged(newOpv);
+ }
+ });
+ }
+
+ { // queryOps
+ // TODO implement queryOps controls
+ }
+ }
+
+ { // bottom (default values, value constraints)
+ final Composite bottomContainer = toolkit.createComposite(body);
+ bottomContainer.setLayout(new GridLayout(2, true));
+ bottomContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ toolkit.paintBordersFor(bottomContainer);
+
+ { // default values
+ final Composite defaultValuesContainer = toolkit.createComposite(bottomContainer);
+ defaultValuesContainer.setLayout(new GridLayout(2, false));
+ defaultValuesContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ toolkit.paintBordersFor(defaultValuesContainer);
+
+ final Label label = toolkit.createLabel(defaultValuesContainer, CndMessages.defaultValuesLabel);
+ label.setLayoutData(new GridData(SWT.BEGINNING, SWT.TOP, false, false));
+ ((GridData)label.getLayoutData()).horizontalSpan = 2;
+
+ final Table table = FormUtils.createTable(toolkit, defaultValuesContainer);
+ table.setHeaderVisible(false);
+ table.setLinesVisible(false);
+ ((GridData)table.getLayoutData()).heightHint = table.getItemHeight() * 4;
+ table.setToolTipText(CndMessages.defaultValuesToolTip);
+ this.defaultValuesError.setControl(table);
+
+ createDefaultValuesActions();
+
+ // table context menu
+ final MenuManager menuManager = new MenuManager();
+ menuManager.add(new DelegateAction(CndMessages.addDefaultValueMenuText, this.addDefaultValue));
+ menuManager.add(new DelegateAction(CndMessages.editDefaultValueMenuText, this.editDefaultValue));
+ menuManager.add(new DelegateAction(CndMessages.deleteDefaultValueMenuText, this.deleteDefaultValue));
+ table.setMenu(menuManager.createContextMenu(table));
+
+ createDefaultValuesViewer(table);
+
+ // add toolbar buttons (add, edit, delete)
+ final ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT | SWT.VERTICAL);
+ final ToolBar toolBar = toolBarManager.createControl(defaultValuesContainer);
+ toolkit.adapt(toolBar);
+
+ final Cursor handCursor = new Cursor(Display.getCurrent(), SWT.CURSOR_HAND);
+ toolBar.setCursor(handCursor);
+ toolBarManager.add(this.addDefaultValue);
+ toolBarManager.add(this.editDefaultValue);
+ toolBarManager.add(this.deleteDefaultValue);
+ toolBarManager.update(true);
+
+ // fill with data
+ this.defaultValuesViewer.setInput(this);
+ }
+
+ { // value constraints
+ final Composite valueConstraintsContainer = toolkit.createComposite(bottomContainer);
+ valueConstraintsContainer.setLayout(new GridLayout(2, false));
+ valueConstraintsContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ toolkit.paintBordersFor(valueConstraintsContainer);
+
+ final Label label = toolkit.createLabel(valueConstraintsContainer, CndMessages.valueConstraintsLabel);
+ label.setLayoutData(new GridData(SWT.BEGINNING, SWT.TOP, false, false));
+ ((GridData)label.getLayoutData()).horizontalSpan = 2;
+
+ final Table table = FormUtils.createTable(toolkit, valueConstraintsContainer);
+ table.setHeaderVisible(false);
+ table.setLinesVisible(false);
+ ((GridData)table.getLayoutData()).heightHint = table.getItemHeight() * 4;
+ table.setToolTipText(CndMessages.valueConstraintsToolTip);
+ this.valueConstraintsError.setControl(table);
+
+ createValueConstraintsActions();
+
+ // table context menu
+ final MenuManager menuManager = new MenuManager();
+ menuManager.add(new DelegateAction(CndMessages.addValueConstraintMenuText, this.addValueConstraint));
+ menuManager.add(new DelegateAction(CndMessages.editValueConstraintMenuText, this.editValueConstraint));
+ menuManager.add(new DelegateAction(CndMessages.deleteValueConstraintMenuText, this.deleteValueConstraint));
+ table.setMenu(menuManager.createContextMenu(table));
+
+ createValueConstraintsViewer(table);
+
+ // add toolbar buttons (add, edit, delete)
+ final ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT | SWT.VERTICAL);
+ final ToolBar toolBar = toolBarManager.createControl(valueConstraintsContainer);
+ toolkit.adapt(toolBar);
+
+ final Cursor handCursor = new Cursor(Display.getCurrent(), SWT.CURSOR_HAND);
+ toolBar.setCursor(handCursor);
+ toolBarManager.add(this.addValueConstraint);
+ toolBarManager.add(this.editValueConstraint);
+ toolBarManager.add(this.deleteValueConstraint);
+ toolBarManager.update(true);
+
+ // fill with data
+ this.valueConstraintsViewer.setInput(this);
+ }
+ }
+
+ // must be done after constructor
+ this.propertyBeingEdited.addListener(new PropertyChangeListener() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent)
+ */
+ @Override
+ public void propertyChange( final PropertyChangeEvent e ) {
+ handlePropertyChanged(e);
+ }
+ });
+
+ // set messages
+ validateAttributes();
+ validateName();
+ validateDefaultValues();
+ validateValueConstraints();
+ validateType();
+ }
+
+ void createValueConstraintsActions() {
+ this.addValueConstraint = new Action(Utils.EMPTY_STRING) {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ handleAddValueConstraint();
+ }
+ };
+ this.addValueConstraint.setToolTipText(CndMessages.addValueConstraintToolTip);
+ this.addValueConstraint.setImageDescriptor(JcrUiUtils.getNewImageDescriptor());
+
+ this.deleteValueConstraint = new Action(Utils.EMPTY_STRING) {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ handleDeleteValueConstraint();
+ }
+ };
+ this.deleteValueConstraint.setEnabled(false);
+ this.deleteValueConstraint.setToolTipText(CndMessages.deleteValueConstraintToolTip);
+ this.deleteValueConstraint.setImageDescriptor(JcrUiUtils.getDeleteImageDescriptor());
+
+ this.editValueConstraint = new Action(Utils.EMPTY_STRING) {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.action.Action#run()
+ */
+ @Override
+ public void run() {
+ handleEditValueConstraint();
+ }
+ };
+ this.editValueConstraint.setEnabled(false);
+ this.editValueConstraint.setToolTipText(CndMessages.editValueConstraintToolTip);
+ this.editValueConstraint.setImageDescriptor(JcrUiUtils.getEditImageDescriptor());
+ }
+
+ private void createValueConstraintsViewer( final Table valueConstraintsTable ) {
+ this.valueConstraintsViewer = new TableViewer(valueConstraintsTable);
+ this.valueConstraintsViewer.setLabelProvider(new LabelProvider());
+ this.valueConstraintsViewer.setContentProvider(new IStructuredContentProvider() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#dispose()
+ */
+ @Override
+ public void dispose() {
+ // nothing to do
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
+ */
+ @Override
+ public Object[] getElements( final Object inputElement ) {
+ final PropertyDefinition propDefn = accessModel();
+ final String[] valueConstraints = propDefn.getValueConstraints();
+
+ if (valueConstraints == null) {
+ return Utils.EMPTY_OBJECT_ARRAY;
+ }
+
+ return valueConstraints;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object,
+ * java.lang.Object)
+ */
+ @Override
+ public void inputChanged( final Viewer viewer,
+ final Object oldInput,
+ final Object newInput ) {
+ // nothing to do
+ }
+ });
+
+ this.valueConstraintsViewer.addDoubleClickListener(new IDoubleClickListener() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.IDoubleClickListener#doubleClick(org.eclipse.jface.viewers.DoubleClickEvent)
+ */
+ @Override
+ public void doubleClick( final DoubleClickEvent event ) {
+ handleEditValueConstraint();
+ }
+ });
+
+ this.valueConstraintsViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
+ */
+ @Override
+ public void selectionChanged( final SelectionChangedEvent event ) {
+ handleValueConstraintSelected();
+ }
+ });
+ }
+
+ /**
+ * <strong>Should only be called after the dialog's <code>OK</code> button has been selected.</strong>
+ *
+ * @return the property definition represented by the dialog UI controls (never <code>null</code>)
+ */
+ public PropertyDefinition getPropertyDefinition() {
+ return this.propertyBeingEdited;
+ }
+
+ String getSelectedDefaultValue() {
+ final IStructuredSelection selection = (IStructuredSelection)this.defaultValuesViewer.getSelection();
+
+ if (selection.isEmpty()) {
+ return null;
+ }
+
+ assert (selection.size() == 1) : "default values viewer should not allow multiple selections"; //$NON-NLS-1$
+ assert (selection.getFirstElement() instanceof String) : "selection was not a string"; //$NON-NLS-1$
+ return (String)selection.getFirstElement();
+ }
+
+ String getSelectedValueConstraint() {
+ final IStructuredSelection selection = (IStructuredSelection)this.valueConstraintsViewer.getSelection();
+
+ if (selection.isEmpty()) {
+ return null;
+ }
+
+ assert (selection.size() == 1) : "value constraints viewer should not allow multiple selections"; //$NON-NLS-1$
+ assert (selection.getFirstElement() instanceof String) : "selection was not a string"; //$NON-NLS-1$
+ return (String)selection.getFirstElement();
+ }
+
+ void handleAddDefaultValue() {
+ final PropertyDefinition propDefn = getPropertyDefinition();
+ final Collection<String> currentDefaultValues = propDefn.getDefaultValuesAsStrings();
+ final StringValueEditorDialog dialog = new StringValueEditorDialog(getShell()) {
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jboss.tools.modeshape.jcr.ui.cnd.StringValueEditorDialog#getSettings()
+ */
+ @Override
+ protected Settings getSettings() {
+ final StringValueEditorDialog.Settings settings = new StringValueEditorDialog.Settings();
+ settings.acceptMessage = CndMessages.acceptDefaultValueDialogMsg;
+ settings.initialMessage = CndMessages.defaultValueDialogMsg;
+ settings.labelText = CndMessages.defaultValueLabel;
+ settings.messageAreaTitle = CndMessages.defaultValueDialogCreateMsg;
+ settings.valueToolTip = CndMessages.defaultValueToolTip;
+ settings.validator = new Validator() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jboss.tools.modeshape.jcr.ui.cnd.StringValueEditorDialog.Validator#validate(java.lang.String)
+ */
+ @Override
+ public ValidationStatus validate( final String newValue ) {
+ final ValidationStatus status = CndValidator.isValid(newValue, propDefn.getType(), propDefn.getName());
+
+ if (status.isError()) {
+ return status;
+ }
+
+ // check for duplicate
+ if (currentDefaultValues.contains(newValue)) {
+ return ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateDefaultValue, propDefn.getName(),
+ newValue));
+ }
+
+ return ValidationStatus.OK_STATUS;
+ }
+ };
+
+ return settings;
+ }
+ };
+
+ dialog.create();
+ dialog.getShell().pack();
+
+ if (dialog.open() == Window.OK) {
+ final String newDefaultValue = dialog.getValue();
+
+ if (!this.propertyBeingEdited.addValueConstraint(newDefaultValue)) {
+ MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorAddingDefaultValue, newDefaultValue));
+ }
+ }
+ }
+
+ void handleAddValueConstraint() {
+ final PropertyDefinition propDefn = getPropertyDefinition();
+ final Collection<String> currentConstraints = Arrays.asList(propDefn.getValueConstraints());
+ final StringValueEditorDialog dialog = new StringValueEditorDialog(getShell()) {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jboss.tools.modeshape.jcr.ui.cnd.StringValueEditorDialog#getSettings()
+ */
+ @Override
+ protected Settings getSettings() {
+ final StringValueEditorDialog.Settings settings = new StringValueEditorDialog.Settings();
+ settings.acceptMessage = CndMessages.acceptValueConstraintDialogMsg;
+ settings.initialMessage = CndMessages.valueConstraintDialogMsg;
+ settings.labelText = CndMessages.valueConstraintLabel;
+ settings.messageAreaTitle = CndMessages.valueConstraintDialogCreateMsg;
+ settings.valueToolTip = CndMessages.valueConstraintToolTip;
+ settings.validator = new Validator() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jboss.tools.modeshape.jcr.ui.cnd.StringValueEditorDialog.Validator#validate(java.lang.String)
+ */
+ @Override
+ public ValidationStatus validate( final String newValue ) {
+ final ValidationStatus status = CndValidator.validateValueConstraint(newValue);
+
+ if (status.isError()) {
+ return status;
+ }
+
+ // check for duplicate
+ if (currentConstraints.contains(newValue)) {
+ return ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateValueConstraint,
+ propDefn.getName(), newValue));
+ }
+
+ return ValidationStatus.OK_STATUS;
+ }
+ };
+
+ return settings;
+ }
+ };
+ dialog.create();
+ dialog.getShell().pack();
+
+ if (dialog.open() == Window.OK) {
+ final String newValueConstraint = dialog.getValue();
+
+ if (!this.propertyBeingEdited.addValueConstraint(newValueConstraint)) {
+ MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorAddingValueConstraint, newValueConstraint));
+ }
+ }
+ }
+
+ void handleAutocreatedChanged( final boolean newAutocreated ) {
+ this.propertyBeingEdited.setAutoCreated(newAutocreated);
+ }
+
+ void handleDefaultValueSelected() {
+ // update button enablements
+ final boolean enable = (getSelectedDefaultValue() != null);
+
+ if (this.editDefaultValue.isEnabled() != enable) {
+ this.editDefaultValue.setEnabled(enable);
+ }
+
+ if (this.deleteDefaultValue.isEnabled() != enable) {
+ this.deleteDefaultValue.setEnabled(enable);
+ }
+ }
+
+ void handleDeleteDefaultValue() {
+ assert (getSelectedDefaultValue() != null) : "Delete default value handler called and there is no default value selected"; //$NON-NLS-1$
+ final String defaultValue = getSelectedDefaultValue();
+
+ // show confirmation dialog
+ if (MessageFormDialog.openQuestion(getShell(), CndMessages.deleteDefaultValueDialogTitle, JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.deleteDefaultValueDialogMessage, defaultValue))) {
+ if (!this.propertyBeingEdited.removeDefaultValue(defaultValue)) {
+ MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorDeletingDefaultValue, defaultValue));
+ }
+ }
+ }
+
+ void handleDeleteValueConstraint() {
+ assert (getSelectedValueConstraint() != null) : "Delete value constraint handler called and there is no value constraint selected"; //$NON-NLS-1$
+ final String valueConstraint = getSelectedValueConstraint();
+
+ // show confirmation dialog
+ if (MessageFormDialog.openQuestion(getShell(), CndMessages.deleteValueConstraintDialogTitle,
+ JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.deleteValueConstraintDialogMessage, valueConstraint))) {
+ if (!this.propertyBeingEdited.removeValueConstraint(valueConstraint)) {
+ MessageFormDialog.openError(getShell(), UiMessages.errorDialogTitle, JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorDeletingValueConstraint, valueConstraint));
+ }
+ }
+ }
+
+ void handleEditDefaultValue() {
+ assert (getSelectedDefaultValue() != null) : "Edit default value handler called but there is not a default value selected"; //$NON-NLS-1$
+
+ final PropertyDefinition propDefn = getPropertyDefinition();
+ final String selectedDefaultValue = getSelectedDefaultValue();
+ final Collection<String> currentDefaultValues = new ArrayList<String>(propDefn.getDefaultValuesAsStrings());
+ currentDefaultValues.remove(selectedDefaultValue); // remove selected so validation doesn't flag it as a duplicate
+
+ final StringValueEditorDialog dialog = new StringValueEditorDialog(getShell()) {
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jboss.tools.modeshape.jcr.ui.cnd.StringValueEditorDialog#getSettings()
+ */
+ @Override
+ protected Settings getSettings() {
+ final StringValueEditorDialog.Settings settings = new StringValueEditorDialog.Settings();
+ settings.acceptMessage = CndMessages.acceptDefaultValueDialogMsg;
+ settings.initialMessage = CndMessages.defaultValueDialogMsg;
+ settings.labelText = CndMessages.defaultValueLabel;
+ settings.messageAreaTitle = CndMessages.defaultValueDialogEditMsg;
+ settings.valueToolTip = CndMessages.defaultValueToolTip;
+ settings.valueBeingEdited = selectedDefaultValue;
+ settings.validator = new Validator() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jboss.tools.modeshape.jcr.ui.cnd.StringValueEditorDialog.Validator#validate(java.lang.String)
+ */
+ @Override
+ public ValidationStatus validate( final String newValue ) {
+ final ValidationStatus status = CndValidator.isValid(newValue, propDefn.getType(), propDefn.getName());
+
+ if (status.isError()) {
+ return status;
+ }
+
+ // check for duplicate
+ if (currentDefaultValues.contains(newValue)) {
+ return ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateDefaultValue, propDefn.getName(),
+ newValue));
+ }
+
+ return ValidationStatus.OK_STATUS;
+ }
+ };
+
+ return settings;
+ }
+ };
+
+ dialog.create();
+ dialog.getShell().pack();
+
+ if (dialog.open() == Window.OK) {
+ final String modifiedDefaultValue = dialog.getValue();
+ boolean removed = false;
+ boolean added = false;
+
+ // remove existing and add in new
+ if (this.propertyBeingEdited.removeDefaultValue(selectedDefaultValue)) {
+ removed = true;
+
+ if (this.propertyBeingEdited.addDefaultValue(modifiedDefaultValue)) {
+ added = true;
+ }
+ }
+
+ if (!removed || !added) {
+ MessageFormDialog.openError(getShell(),
+ UiMessages.errorDialogTitle,
+ JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorEditingDefaultValue, new Object[] { modifiedDefaultValue,
+ removed, added }));
+ }
+ }
+ }
+
+ void handleEditValueConstraint() {
+ assert (getSelectedValueConstraint() != null) : "Edit value constraint handler called but there is not a value constraint selected"; //$NON-NLS-1$
+
+ final PropertyDefinition propDefn = getPropertyDefinition();
+ final String selectedValueConstraint = getSelectedValueConstraint();
+ final Collection<String> currentConstraints = new ArrayList<String>(Arrays.asList(propDefn.getValueConstraints()));
+ currentConstraints.remove(selectedValueConstraint); // remove selected so validation doesn't flag it as a duplicate
+
+ final StringValueEditorDialog dialog = new StringValueEditorDialog(getShell()) {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jboss.tools.modeshape.jcr.ui.cnd.StringValueEditorDialog#getSettings()
+ */
+ @Override
+ protected Settings getSettings() {
+ final StringValueEditorDialog.Settings settings = new StringValueEditorDialog.Settings();
+ settings.acceptMessage = CndMessages.acceptValueConstraintDialogMsg;
+ settings.initialMessage = CndMessages.valueConstraintDialogMsg;
+ settings.labelText = CndMessages.valueConstraintLabel;
+ settings.messageAreaTitle = CndMessages.valueConstraintDialogEditMsg;
+ settings.valueToolTip = CndMessages.valueConstraintToolTip;
+ settings.valueBeingEdited = selectedValueConstraint;
+ settings.validator = new Validator() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.jboss.tools.modeshape.jcr.ui.cnd.StringValueEditorDialog.Validator#validate(java.lang.String)
+ */
+ @Override
+ public ValidationStatus validate( final String newValue ) {
+ final ValidationStatus status = CndValidator.validateValueConstraint(newValue);
+
+ if (status.isError()) {
+ return status;
+ }
+
+ // check for duplicate
+ if (currentConstraints.contains(newValue)) {
+ return ValidationStatus.createErrorMessage(NLS.bind(Messages.duplicateValueConstraint,
+ propDefn.getName(), newValue));
+ }
+
+ return ValidationStatus.OK_STATUS;
+ }
+ };
+
+ return settings;
+ }
+ };
+ dialog.create();
+ dialog.getShell().pack();
+
+ if (dialog.open() == Window.OK) {
+ final String modifiedValueConstraint = dialog.getValue();
+ boolean removed = false;
+ boolean added = false;
+
+ // remove existing and add in new
+ if (this.propertyBeingEdited.removeValueConstraint(selectedValueConstraint)) {
+ removed = true;
+
+ if (this.propertyBeingEdited.addValueConstraint(modifiedValueConstraint)) {
+ added = true;
+ }
+ }
+
+ if (!removed || !added) {
+ MessageFormDialog.openError(getShell(),
+ UiMessages.errorDialogTitle,
+ JcrUiUtils.getCndEditorImage(),
+ NLS.bind(CndMessages.errorEditingValueConstraint, new Object[] {
+ modifiedValueConstraint, removed, added }));
+ }
+ }
+ }
+
+ void handleMandatoryChanged( final boolean newMandatory ) {
+ this.propertyBeingEdited.setMandatory(newMandatory);
+ }
+
+ void handleMultipleChanged( final boolean newMultiple ) {
+ this.propertyBeingEdited.setMultiple(newMultiple);
+ }
+
+ void handleNameChanged( final String newName ) {
+ this.propertyBeingEdited.setName(newName);
+ }
+
+ void handleNoFullTextChanged( final boolean newNoFullText ) {
+ this.propertyBeingEdited.setFullTextSearchable(!newNoFullText);
+ }
+
+ void handleNoQueryOrderChanged( final boolean newNoQueryOrder ) {
+ this.propertyBeingEdited.setQueryOrderable(!newNoQueryOrder);
+ }
+
+ void handleOnParentVersionChanged( final String newOpv ) {
+ this.propertyBeingEdited.setOnParentVersion(newOpv);
+ }
+
+ void handlePropertyChanged( final PropertyChangeEvent e ) {
+ final String propName = e.getPropertyName();
+
+ if (PropertyName.AUTOCREATED.toString().equals(propName) || PropertyName.MANDATORY.toString().equals(propName)
+ || PropertyName.MULTIPLE.toString().equals(propName) || PropertyName.NO_FULL_TEXT.toString().equals(propName)
+ || PropertyName.NO_QUERY_ORDER.toString().equals(propName) || PropertyName.PROTECTED.toString().equals(propName)
+ || PropertyName.ON_PARENT_VERSION.toString().equals(propName) || PropertyName.QUERY_OPS.toString().equals(propName)) {
+ validateAttributes();
+ } else if (PropertyName.DEFAULT_VALUES.toString().equals(propName)) {
+ validateDefaultValues();
+ this.defaultValuesViewer.refresh();
+ } else if (PropertyName.NAME.toString().equals(propName)) {
+ validateName();
+ } else if (PropertyName.TYPE.toString().equals(propName)) {
+ validateType();
+ } else if (PropertyName.VALUE_CONSTRAINTS.toString().equals(propName)) {
+ validateValueConstraints();
+ this.valueConstraintsViewer.refresh();
+ }
+
+ updateState();
+ }
+
+ void handleProtectedChanged( final boolean newProtected ) {
+ this.propertyBeingEdited.setProtected(newProtected);
+ }
+
+ void handleTypeChanged( final String newType ) {
+ this.propertyBeingEdited.setType(PropertyType.valueOf(newType));
+ }
+
+ void handleValueConstraintSelected() {
+ // update button enablements
+ final boolean enable = (getSelectedValueConstraint() != null);
+
+ if (this.editValueConstraint.isEnabled() != enable) {
+ this.editValueConstraint.setEnabled(enable);
+ }
+
+ if (this.deleteValueConstraint.isEnabled() != enable) {
+ this.deleteValueConstraint.setEnabled(enable);
+ }
+ }
+
+ private boolean isEditMode() {
+ return (this.originalProperty != null);
+ }
+
+ private void updateMessage( final ValidationStatus status,
+ final ErrorMessage errorMsg ) {
+ JcrUiUtils.setMessage(status, errorMsg);
+
+ if (errorMsg.isOk()) {
+ this.scrolledForm.getMessageManager().removeMessage(errorMsg.getKey(), errorMsg.getControl());
+ } else {
+ this.scrolledForm.getMessageManager().addMessage(errorMsg.getKey(), errorMsg.getMessage(), null,
+ errorMsg.getMessageType(), errorMsg.getControl());
+ }
+ }
+
+ private void updateState() {
+ final int messageType = this.scrolledForm.getMessageType();
+ boolean enable = (messageType != IMessageProvider.ERROR);
+
+ if (enable && isEditMode() && this.originalProperty.equals(this.propertyBeingEdited)) {
+ enable = false;
+ }
+
+ // set enabled state of OK button
+ if (this.btnOk.getEnabled() != enable) {
+ this.btnOk.setEnabled(enable);
+ }
+ }
+
+ private void validateAttributes() {
+ // TODO primary item
+ }
+
+ private void validateDefaultValues() {
+ updateMessage(CndValidator.validateDefaultValues(this.propertyBeingEdited), this.defaultValuesError);
+ }
+
+ private void validateName() {
+ updateMessage(this.nameEditor.getStatus(), this.nameError);
+ }
+
+ private void validateType() {
+ // no validation required since user cannot enter an invalid value
+ }
+
+ private void validateValueConstraints() {
+ updateMessage(CndValidator.validateValueConstraints(this.propertyBeingEdited), this.valueConstraintsError);
+ }
+}
Property changes on: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/PropertyDialog.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/QualifiedNameDialog.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/QualifiedNameDialog.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/QualifiedNameDialog.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -15,34 +15,26 @@
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CCombo;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.FormDialog;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
-import org.jboss.tools.modeshape.jcr.MultiValidationStatus;
import org.jboss.tools.modeshape.jcr.Utils;
-import org.jboss.tools.modeshape.jcr.cnd.CndValidator;
+import org.jboss.tools.modeshape.jcr.ValidationStatus;
import org.jboss.tools.modeshape.jcr.cnd.QualifiedName;
import org.jboss.tools.modeshape.jcr.ui.Activator;
import org.jboss.tools.modeshape.jcr.ui.JcrUiConstants;
-import org.jboss.tools.modeshape.ui.forms.FormUtils.Styles;
/**
* The <code>QualifiedNameDialog</code> is used to create or edit a qualified name.
*/
-class QualifiedNameDialog extends FormDialog {
+final class QualifiedNameDialog extends FormDialog {
private Button btnOk;
@@ -59,19 +51,17 @@
private final String qualifiedNameType;
- private String qualifier;
-
private ScrolledForm scrolledForm;
private final String title;
- private String unqualifiedName;
-
/**
* A collection of known qualifiers/namespace prefixes to the CND (never <code>null</code>).
*/
private final List<String> validQualifiers;
+ private QualifiedNameEditor nameEditor;
+
/**
* Used to construct a new qualified name.
*
@@ -111,8 +101,6 @@
Utils.verifyIsNotNull(qnameBeingEdited, "qnameBeingEdited"); //$NON-NLS-1$
this.qnameBeingEdited = qnameBeingEdited;
- this.qualifier = this.qnameBeingEdited.getQualifier();
- this.unqualifiedName = this.qnameBeingEdited.getUnqualifiedName();
}
/**
@@ -165,86 +153,25 @@
final Composite body = this.scrolledForm.getBody();
body.setLayout(new GridLayout(2, false));
- { // qualifier
- final Label lblQualifier = toolkit.createLabel(body, CndMessages.qualifierLabel, SWT.NONE);
- lblQualifier.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
+ this.nameEditor = new QualifiedNameEditor(body,
+ SWT.NONE,
+ toolkit,
+ this.qualifiedNameType,
+ this.validQualifiers,
+ this.qnameBeingEdited);
+ this.nameEditor.setExistingQNames(this.existingQNames);
+ this.nameEditor.addListener(SWT.Modify, new Listener() {
- final CCombo cbxQualifiers = new CCombo(body, Styles.COMBO_STYLE);
- toolkit.adapt(cbxQualifiers, true, false);
- cbxQualifiers.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
- cbxQualifiers.setToolTipText(CndMessages.validQualifiersToolTip);
-
- // populate qualifiers
- for (final String validQualifier : this.validQualifiers) {
- cbxQualifiers.add(validQualifier);
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
+ */
+ @Override
+ public void handleEvent( final Event e ) {
+ handleNameChanged(e.text);
}
-
- // select the current qualifier
- if (isEditMode()) {
- final String currentQualifier = this.qnameBeingEdited.getQualifier();
-
- if (Utils.isEmpty(currentQualifier)) {
- cbxQualifiers.select(0);
- } else {
- final int index = cbxQualifiers.indexOf(currentQualifier);
-
- if (index == -1) {
- // not a valid qualifier but add and select
- cbxQualifiers.add(currentQualifier);
- cbxQualifiers.select(cbxQualifiers.getItemCount() - 1);
- } else {
- cbxQualifiers.select(index);
- }
- }
- } else {
- cbxQualifiers.select(0);
- }
-
- cbxQualifiers.addSelectionListener(new SelectionAdapter() {
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
- */
- @Override
- public void widgetSelected( final SelectionEvent e ) {
- final String newQualifier = ((CCombo)e.widget).getText();
- handleQualifierChanged(newQualifier);
- }
- });
- }
-
- { // unqualified name
- final Label lblName = toolkit.createLabel(body, CndMessages.nameLabel, SWT.NONE);
- lblName.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
-
- final Text txtName = toolkit.createText(body, null, Styles.TEXT_STYLE);
- txtName.setToolTipText(CndMessages.unqualifiedNameToolTip);
-
- final GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
- gd.verticalIndent += ((GridLayout)body.getLayout()).verticalSpacing;
- txtName.setLayoutData(gd);
-
- if (isEditMode()) {
- txtName.setText(this.qnameBeingEdited.getUnqualifiedName());
- }
-
- txtName.addModifyListener(new ModifyListener() {
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
- */
- @Override
- public void modifyText( final ModifyEvent e ) {
- handleNameChanged(((Text)e.widget).getText());
- }
- });
-
- txtName.setFocus();
- }
+ });
}
/**
@@ -253,19 +180,13 @@
* @return the new or edited qualified name (never <code>null</code>)
*/
public QualifiedName getQualifiedName() {
- return new QualifiedName(this.qualifier, this.unqualifiedName);
+ return this.nameEditor.getQualifiedName();
}
void handleNameChanged( final String newName ) {
- this.unqualifiedName = newName;
updateState();
}
- void handleQualifierChanged( final String newQualifier ) {
- this.qualifier = newQualifier;
- updateState();
- }
-
private boolean isEditMode() {
return (this.qnameBeingEdited != null);
}
@@ -274,23 +195,16 @@
* @param existingQNames used to check against for duplicate qualified names (can be <code>null</code> or empty)
*/
void setExistingQNames( final Collection<QualifiedName> existingQNames ) {
- if (Utils.isEmpty(existingQNames)) {
- this.existingQNames = null;
+ if (this.nameEditor == null) {
+ this.existingQNames = existingQNames;
} else {
- this.existingQNames = new ArrayList<QualifiedName>(existingQNames);
-
- // so that validating won't show it as a duplicate
- if (isEditMode()) {
- this.existingQNames.remove(this.qnameBeingEdited);
- }
+ this.nameEditor.setExistingQNames(existingQNames);
}
}
private void updateState() {
- // validate qname
- final QualifiedName currentQName = new QualifiedName(this.qualifier, this.unqualifiedName);
- final MultiValidationStatus status = CndValidator.validateQualifiedName(currentQName, this.qualifiedNameType,
- this.validQualifiers, this.existingQNames);
+ final QualifiedName modifiedQName = this.nameEditor.getQualifiedName();
+ final ValidationStatus status = this.nameEditor.getStatus();
boolean enable = !status.isError();
// a bug in Eclipse doesn't reset the font color going from an error to NONE so first set to INFORMATION to get the
@@ -299,8 +213,8 @@
if (!enable) {
this.scrolledForm.setMessage(status.getMessage(), IMessageProvider.ERROR);
- } else if ((isEditMode() && currentQName.equals(this.qnameBeingEdited))
- || (!isEditMode() && Utils.isEmpty(this.qualifier) && Utils.isEmpty(this.unqualifiedName))) {
+ } else if ((isEditMode() && modifiedQName.equals(this.qnameBeingEdited))
+ || (!isEditMode() && Utils.isEmpty(modifiedQName.getQualifier()) && Utils.isEmpty(modifiedQName.getUnqualifiedName()))) {
enable = false;
this.scrolledForm.setMessage(NLS.bind(CndMessages.qualifiedNameDialogMsg, this.qualifiedNameType),
IMessageProvider.NONE);
Added: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/QualifiedNameEditor.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/QualifiedNameEditor.java (rev 0)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/QualifiedNameEditor.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -0,0 +1,292 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ *
+ * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
+ *
+ * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
+ */
+package org.jboss.tools.modeshape.jcr.ui.cnd;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CCombo;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.jboss.tools.modeshape.jcr.Utils;
+import org.jboss.tools.modeshape.jcr.ValidationStatus;
+import org.jboss.tools.modeshape.jcr.cnd.CndValidator;
+import org.jboss.tools.modeshape.jcr.cnd.QualifiedName;
+import org.jboss.tools.modeshape.ui.forms.FormUtils.Styles;
+
+/**
+ * A UI container that can be used to edit or create a qualified name. To receive notification of when a change was made in the
+ * editor, register using {@link #addListener(int, org.eclipse.swt.widgets.Listener)} using {@link SWT#Modify} as the event type.
+ * After notification, a call to {@link #getStatus()} will have the latest validation results.
+ */
+final class QualifiedNameEditor extends Composite {
+
+ private CCombo cbxQualifiers;
+
+ /**
+ * An optional collection of existing qualified names. When this is non-empty, it is checked to make sure the qualified name
+ * being edited is not a duplicate.
+ */
+ private Collection<QualifiedName> existingQNames;
+
+ private Label lblName;
+
+ private Label lblQualifier;
+
+ /**
+ * The qualified name being edited or <code>null</code> when creating a qualified name.
+ */
+ private QualifiedName qnameBeingEdited;
+
+ private final String qualifiedNameType;
+
+ private String qualifier;
+
+ private ValidationStatus status;
+
+ private final FormToolkit toolkit;
+
+ private Text txtName;
+
+ private String unqualifiedName;
+
+ /**
+ * A collection of known qualifiers/namespace prefixes to the CND (never <code>null</code>).
+ */
+ private List<String> validQualifiers;
+
+ /**
+ * Used to edit an existing or create a new qualified name.
+ *
+ * @param parent the parent container (cannot be <code>null</code>)
+ * @param style the composite style
+ * @param toolkit the toolkit (cannot be <code>null</code>)
+ * @param qualifiedNameType a word describing what the qualified name represents (cannot be <code>null</code> or empty)
+ * @param existingQualifiers the existing qualifies (can be <code>null</code> or empty)
+ * @param qnameBeingEdited the qualified name being edited or <code>null</code> if creating a new name
+ */
+ public QualifiedNameEditor( final Composite parent,
+ final int style,
+ final FormToolkit toolkit,
+ final String qualifiedNameType,
+ final Collection<String> existingQualifiers,
+ final QualifiedName qnameBeingEdited ) {
+ super(parent, style);
+ Utils.verifyIsNotNull(qualifiedNameType, "qualifiedNameType"); //$NON-NLS-1$
+ Utils.verifyIsNotNull(toolkit, "toolkit"); //$NON-NLS-1$
+
+ this.qualifiedNameType = qualifiedNameType;
+ this.toolkit = toolkit;
+ this.toolkit.adapt(this);
+
+ this.toolkit.adapt(this);
+ this.toolkit.paintBordersFor(this);
+
+ setLayout(new GridLayout(2, false));
+ setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+
+ constructEditor();
+ setValidQualifiers(existingQualifiers);
+ setNameBeingEdited(qnameBeingEdited);
+ }
+
+ private void constructEditor() {
+ { // qualifier
+ this.lblQualifier = this.toolkit.createLabel(this, CndMessages.qualifierLabel, SWT.NONE);
+ this.lblQualifier.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
+
+ this.cbxQualifiers = new CCombo(this, Styles.COMBO_STYLE);
+ this.toolkit.adapt(this.cbxQualifiers, true, false);
+ this.cbxQualifiers.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false));
+ ((GridData)this.cbxQualifiers.getLayoutData()).heightHint = this.cbxQualifiers.getItemHeight() + 4;
+ this.cbxQualifiers.setToolTipText(CndMessages.validQualifiersToolTip);
+
+ this.cbxQualifiers.addModifyListener(new ModifyListener() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+ */
+ @Override
+ public void modifyText( final ModifyEvent e ) {
+ final String newQualifier = ((CCombo)e.widget).getText();
+ handleQualifierChanged(newQualifier);
+ }
+ });
+ }
+
+ { // unqualified name
+ this.lblName = this.toolkit.createLabel(this, CndMessages.nameLabel, SWT.NONE);
+ this.lblName.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
+
+ this.txtName = this.toolkit.createText(this, null, Styles.TEXT_STYLE);
+ this.txtName.setToolTipText(CndMessages.unqualifiedNameToolTip);
+ this.txtName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+ this.txtName.addModifyListener(new ModifyListener() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+ */
+ @Override
+ public void modifyText( final ModifyEvent e ) {
+ handleNameChanged(((Text)e.widget).getText());
+ }
+ });
+
+ this.txtName.setFocus();
+ }
+ }
+
+ /**
+ * @return the new or edited qualified name (never <code>null</code>)
+ */
+ public QualifiedName getQualifiedName() {
+ return new QualifiedName(this.qualifier, this.unqualifiedName);
+ }
+
+ /**
+ * @return the latest validation results (never <code>null</code>)
+ */
+ public ValidationStatus getStatus() {
+ return this.status;
+ }
+
+ void handleNameChanged( final String newName ) {
+ this.unqualifiedName = newName;
+ validate();
+ }
+
+ void handleQualifierChanged( final String newQualifier ) {
+ this.qualifier = newQualifier;
+ validate();
+ }
+
+ private boolean isEditMode() {
+ return (this.qnameBeingEdited != null);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.widgets.Control#setEnabled(boolean)
+ */
+ @Override
+ public void setEnabled( final boolean enable ) {
+ super.setEnabled(enable);
+
+ // all controls have the same enablement
+ if (this.txtName.getEnabled() != enable) {
+ this.lblQualifier.setEnabled(enable);
+ this.cbxQualifiers.setEnabled(enable);
+ this.lblName.setEnabled(enable);
+ this.txtName.setEnabled(enable);
+ }
+ }
+
+ /**
+ * @param existingQNames used to check against for duplicate qualified names (can be <code>null</code> or empty)
+ */
+ void setExistingQNames( final Collection<QualifiedName> existingQNames ) {
+ if (Utils.isEmpty(existingQNames)) {
+ this.existingQNames = null;
+ } else {
+ this.existingQNames = new ArrayList<QualifiedName>(existingQNames);
+
+ // so that validating won't show it as a duplicate
+ if (isEditMode()) {
+ this.existingQNames.remove(this.qnameBeingEdited);
+ }
+ }
+ }
+
+ public void setNameBeingEdited( final QualifiedName qnameBeingEdited ) {
+ this.qnameBeingEdited = qnameBeingEdited;
+
+ if (this.qnameBeingEdited == null) {
+ this.qualifier = null;
+ this.unqualifiedName = null;
+ } else {
+ this.qualifier = this.qnameBeingEdited.getQualifier();
+ this.unqualifiedName = this.qnameBeingEdited.getUnqualifiedName();
+ }
+
+ updateUi();
+ validate();
+ }
+
+ /**
+ * @param validQualifiers the valid qualifiers (can be <code>null</code> or empty)
+ */
+ void setValidQualifiers( final Collection<String> validQualifiers ) {
+ this.validQualifiers = ((validQualifiers == null) ? new ArrayList<String>(1) : new ArrayList<String>(validQualifiers));
+ this.validQualifiers.add(0, CndMessages.noNameQualifierChoice); // include empty qualifier at index 0
+ updateUi();
+ }
+
+ private void updateUi() {
+ // set qualifier choices if they have changed
+ final String[] currentItems = this.cbxQualifiers.getItems();
+
+ // only reload qualifiers if different
+ if ((this.validQualifiers.size() != currentItems.length) || !this.validQualifiers.containsAll(Arrays.asList(currentItems))) {
+ this.cbxQualifiers.setItems(this.validQualifiers.toArray(new String[this.validQualifiers.size()]));
+ }
+
+ // select the current qualifier
+ if (isEditMode()) {
+ final String currentQualifier = this.qnameBeingEdited.getQualifier();
+
+ if (Utils.isEmpty(currentQualifier)) {
+ this.cbxQualifiers.select(0);
+ } else {
+ final int index = this.cbxQualifiers.indexOf(currentQualifier);
+
+ if (index == -1) {
+ // not a valid qualifier but add and select
+ this.cbxQualifiers.add(currentQualifier);
+ this.cbxQualifiers.select(this.cbxQualifiers.getItemCount() - 1);
+ } else {
+ this.cbxQualifiers.select(index);
+ }
+ }
+ } else {
+ this.cbxQualifiers.select(0);
+ }
+
+ if (isEditMode()) {
+ final String name = this.qnameBeingEdited.getUnqualifiedName();
+ this.txtName.setText(Utils.isEmpty(name) ? Utils.EMPTY_STRING : name);
+ } else {
+ this.txtName.setText(Utils.EMPTY_STRING);
+ }
+ }
+
+ private void validate() {
+ final QualifiedName currentQName = new QualifiedName(this.qualifier, this.unqualifiedName);
+ this.status = CndValidator.validateQualifiedName(currentQName, this.qualifiedNameType, this.validQualifiers,
+ this.existingQNames);
+ final Event e = new Event();
+ e.widget = this;
+ e.type = SWT.Modify;
+ e.text = getQualifiedName().get();
+ notifyListeners(SWT.Modify, e);
+ }
+}
Property changes on: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/QualifiedNameEditor.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Added: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/StringValueEditorDialog.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/StringValueEditorDialog.java (rev 0)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/StringValueEditorDialog.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -0,0 +1,270 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ *
+ * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
+ *
+ * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
+ */
+package org.jboss.tools.modeshape.jcr.ui.cnd;
+
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IMessageProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.FormDialog;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.jboss.tools.modeshape.jcr.Utils;
+import org.jboss.tools.modeshape.jcr.ValidationStatus;
+import org.jboss.tools.modeshape.jcr.ui.Activator;
+import org.jboss.tools.modeshape.jcr.ui.JcrUiConstants;
+import org.jboss.tools.modeshape.ui.forms.FormUtils.Styles;
+
+/**
+ * The <code>StringValueEditorDialog</code> is used to create or edit a string value.
+ */
+abstract class StringValueEditorDialog extends FormDialog {
+
+ private Button btnOk;
+
+ /**
+ * The original value (<code>null</code> when creating a new value).
+ */
+ private String originalValue;
+
+ private ScrolledForm scrolledForm;
+
+ private final Settings settings;
+
+ /**
+ * The value being edited (never <code>null</code>).
+ */
+ private String valueBeingEdited;
+
+ /**
+ * Used to construct a new value.
+ *
+ * @param parentShell the parent shell (may be <code>null</code>)
+ */
+ protected StringValueEditorDialog( final Shell parentShell ) {
+ super(parentShell);
+
+ this.settings = getSettings();
+ assert (this.settings != null) : "settings is null"; //$NON-NLS-1$
+ assert (this.settings.acceptMessage != null) : "settings.acceptMessage is null"; //$NON-NLS-1$
+ assert (this.settings.initialMessage != null) : "settings.initialMessage is null"; //$NON-NLS-1$
+ assert (this.settings.labelText != null) : "settings.labelText is null"; //$NON-NLS-1$
+ assert (this.settings.messageAreaTitle != null) : "settings.messageAreaTitle is null"; //$NON-NLS-1$
+
+ if (this.settings.valueBeingEdited == null) {
+ this.valueBeingEdited = Utils.EMPTY_STRING;
+ } else {
+ this.originalValue = this.settings.valueBeingEdited;
+ this.valueBeingEdited = this.settings.valueBeingEdited;
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
+ */
+ @Override
+ protected void configureShell( final Shell newShell ) {
+ super.configureShell(newShell);
+ newShell.setText(CndMessages.valueEditorDialogTitle);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#createButton(org.eclipse.swt.widgets.Composite, int, java.lang.String, boolean)
+ */
+ @Override
+ protected Button createButton( final Composite parent,
+ final int id,
+ final String label,
+ final boolean defaultButton ) {
+ final Button btn = super.createButton(parent, id, label, defaultButton);
+
+ if (id == IDialogConstants.OK_ID) {
+ // disable OK button initially
+ this.btnOk = btn;
+ btn.setEnabled(false);
+ }
+
+ return btn;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.ui.forms.FormDialog#createFormContent(org.eclipse.ui.forms.IManagedForm)
+ */
+ @Override
+ protected void createFormContent( final IManagedForm managedForm ) {
+ this.scrolledForm = managedForm.getForm();
+ this.scrolledForm.setText(this.settings.messageAreaTitle);
+ this.scrolledForm.setImage(Activator.getSharedInstance().getImage(JcrUiConstants.Images.CND_EDITOR));
+ this.scrolledForm.setMessage(this.settings.initialMessage, IMessageProvider.NONE);
+
+ final FormToolkit toolkit = managedForm.getToolkit();
+ toolkit.decorateFormHeading(this.scrolledForm.getForm());
+
+ final Composite body = this.scrolledForm.getBody();
+ body.setLayout(new GridLayout(2, false));
+
+ final Label lblValue = toolkit.createLabel(body, this.settings.labelText, SWT.NONE);
+ lblValue.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
+
+ final Text txtValue = toolkit.createText(body, null, Styles.TEXT_STYLE);
+ txtValue.setToolTipText(this.settings.valueToolTip);
+
+ final GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false);
+ gd.verticalIndent += ((GridLayout)body.getLayout()).verticalSpacing;
+ txtValue.setLayoutData(gd);
+
+ if (isEditMode()) {
+ txtValue.setText(this.valueBeingEdited);
+ }
+
+ txtValue.addModifyListener(new ModifyListener() {
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+ */
+ @Override
+ public void modifyText( final ModifyEvent e ) {
+ handleValueChanged(((Text)e.widget).getText());
+ }
+ });
+
+ txtValue.setFocus();
+ }
+
+ /**
+ * @return the dialog settings (never <code>null</code>)
+ */
+ protected abstract Settings getSettings();
+
+ /**
+ * <strong>Should only be called after the OK button has been pressed.</strong>
+ *
+ * @return the new or edited value (never <code>null</code>)
+ */
+ public String getValue() {
+ return this.valueBeingEdited;
+ }
+
+ void handleValueChanged( final String newValue ) {
+ this.valueBeingEdited = newValue;
+ updateState();
+ }
+
+ private boolean isEditMode() {
+ return (this.originalValue != null);
+ }
+
+ private void updateState() {
+ boolean enable = true;
+ ValidationStatus status = ValidationStatus.OK_STATUS;
+
+ // validate value
+ if (this.settings.validator != null) {
+ status = this.settings.validator.validate(this.valueBeingEdited);
+ enable = !status.isError();
+ }
+
+ // a bug in Eclipse doesn't reset the font color going from an error to NONE so first set to INFORMATION to get the
+ // font color to change
+ this.scrolledForm.setMessage(Utils.EMPTY_STRING, IMessageProvider.INFORMATION);
+
+ if (!enable) {
+ this.scrolledForm.setMessage(status.getMessage(), IMessageProvider.ERROR);
+ } else if ((isEditMode() && this.originalValue.equals(this.valueBeingEdited))
+ || (!isEditMode() && Utils.isEmpty(this.valueBeingEdited))) {
+ enable = false;
+ this.scrolledForm.setMessage(this.settings.initialMessage, IMessageProvider.NONE);
+ } else {
+ int severity = IMessageProvider.NONE; // OK severity
+ String message = status.getMessage();
+
+ if (status.isWarning()) {
+ severity = IMessageProvider.WARNING;
+ } else if (status.isInfo()) {
+ severity = IMessageProvider.INFORMATION;
+ } else {
+ message = this.settings.initialMessage;
+ }
+
+ this.scrolledForm.setMessage(message, severity);
+ }
+
+ // set enabled state of OK button
+ if (this.btnOk.getEnabled() != enable) {
+ this.btnOk.setEnabled(enable);
+ }
+ }
+
+ class Settings {
+
+ /**
+ * Message area message when OK button is enabled and value is valid (cannot be <code>null</code> or empty).
+ */
+ String acceptMessage;
+
+ /**
+ * Message area message when the dialog is first displayed or when the value is changed back to the initial value (cannot be
+ * <code>null</code> or empty).
+ */
+ String initialMessage;
+
+ /**
+ * Text of the label to the left of the textfield (cannot be <code>null</code> or empty).
+ */
+ String labelText;
+
+ /**
+ * Message area title (cannot be <code>null</code> or empty).
+ */
+ String messageAreaTitle;
+
+ /**
+ * A validator used to determine if the current value is valid (<code>null</code> if no validation is needed).
+ */
+ Validator validator;
+
+ /**
+ * The existing value being edited (can be <code>null</code> if creating a new value).
+ */
+ String valueBeingEdited;
+
+ /**
+ * A tooltip for the textfield where the value is being edited (can be <code>null</code> or empty).
+ */
+ String valueToolTip;
+ }
+
+ /**
+ * Validator of the values.
+ */
+ interface Validator {
+
+ /**
+ * @param newValue the value being validated (can be <code>null</code> or empty)
+ * @return the validation status (never be <code>null</code>)
+ */
+ ValidationStatus validate( String newValue );
+ }
+}
Property changes on: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/StringValueEditorDialog.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/cndMessages.properties
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/cndMessages.properties 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.jcr.ui/src/org/jboss/tools/modeshape/jcr/ui/cnd/cndMessages.properties 2012-03-23 16:56:24 UTC (rev 39801)
@@ -6,10 +6,14 @@
abstractAttribute = Abstract
abstractAttributeToolTip = Indicates if the node type definition cannot be instantiated
+acceptDefaultValueDialogMsg = Select OK to accept the changes to the "{0}" default value.
acceptNamespaceDialogMsg = Select OK to accept the changes to the namespace mapping.
acceptQualifiedNameDialogMsg = Select OK to accept the changes to the "{0}" qualified name.
+acceptValueConstraintDialogMsg = Select OK to accept the changes to the "{0}" value constraint.
addChildNodeMenuText = Add Child Node
addChildNodeToolTip = Add a child node definition to the node type definition
+addDefaultValueMenuText = Add Default Value
+addDefaultValueToolTip = Add a default value to the property definition
addNamespaceMenuText = Add Namespace
addNamespaceToolTip = Add a namespace mapping to the CND
addNodeTypeMenuText = Add Node Type
@@ -20,9 +24,11 @@
addRequiredTypeToolTip = Add a required type to the child node definition
addSuperTypeMenuText = Add Supertype
addSuperTypeToolTip = Add a supertype to the node type definition
+addValueConstraintMenuText = Add Value Constraint
+addValueConstraintToolTip = Add a value constraint to the property definition
attributesHeaderText = Attributes
autocreatedAttribute = Autocreated
-autocreatedAttributeToolTip = Indicates if the child node definition is autocreated when it's node type definition is created
+autocreatedAttributeToolTip = Indicates if the child node definition/property definition is autocreated when it's node type definition is created
childNodeAttributesToolTip = The attributes of a child node definition (autocreated, mandatory, abstract, opv, sns)
childNodeDefaultTypeLabel = Default Type:
childNodeDefaultTypeToolTip = The default type of a child node definition
@@ -59,12 +65,23 @@
cndEditorSourcePageTitle = Source
cndEditorTitle = JCR Compact Node Definition
defaultTypeHeaderText = Default Type
+defaultValueDialogCreateMsg = Create Default Value
+defaultValueDialogEditMsg = Edit Default Value
+defaultValueDialogMsg = Specify the default value then select OK when finished.
+defaultValueLabel = Default Value:
defaultValuesHeaderText = Default Values
+defaultValuesLabel = Default Values:
+defaultValuesToolTip = The default values of a property. Single-valued properties are only allowed one default value while multi-valued properties may have more than one.
+defaultValueToolTip = A default value of a property
# 0 = child node definition name
deleteChildNodeDialogMessage = Are you sure you want to delete the "{0}" child node definition?
deleteChildNodeDialogTitle = Delete Child Node
deleteChildNodeMenuText = Delete Child Node
deleteChildNodeToolTip = Delete the selected child node definition from the node type definition
+deleteDefaultValueDialogMessage = Are you sure you want to delete the "{0}" default value?
+deleteDefaultValueDialogTitle = Delete Default Value
+deleteDefaultValueMenuText = Delete Default Value
+deleteDefaultValueToolTip = Delete the selected default value from the property definition
# 0 = namespace mapping prefix
deleteNamespaceDialogMessage = Are you sure you want to delete the namespace mapping with prefix "{0}"?
deleteNamespaceDialogTitle = Delete Namespace
@@ -90,33 +107,60 @@
deleteSuperTypeDialogTitle = Delete Supertype
deleteSuperTypeMenuText = Delete Supertype
deleteSuperTypeToolTip = Delete the selected supertype from the node type definition
+deleteValueConstraintDialogMessage = Are you sure you want to delete the "{0}" value constraint?
+deleteValueConstraintDialogTitle = Delete Value Constraint
+deleteValueConstraintMenuText = Delete Value Constraint
+deleteValueConstraintToolTip = Delete the selected value constraint from the property definition
editChildNodeMenuText = Edit Child Node
-editChildNodeToolTip = Edit the selected child node definition of the selected node type definition
+editChildNodeToolTip = Edit the selected child node definition of the node type definition
+editDefaultValueMenuText = Edit Default Value
+editDefaultValueToolTip = Edit the selected default value of the property definition
editNamespaceDialogTitle = Edit Namespace
editNamespaceMenuText = Edit Namespace
editNamespaceToolTip = Edit the selected namespace mapping of the CND
editNodeTypeMenuText = Edit Node Type
editNodeTypeToolTip = Edit the selected node type definition of the CND
editPropertyMenuText = Edit Property
-editPropertyToolTip = Edit the selected property definition of the selected node type definition
+editPropertyToolTip = Edit the selected property definition of the node type definition
editRequiredTypeDialogTitle = Edit Required Type
editRequiredTypeMenuText = Edit Required Type
-editRequiredTypeToolTip = Edit the selected required type of the selected child node definition
+editRequiredTypeToolTip = Edit the selected required type of the child node definition
editSuperTypeDialogTitle = Edit Supertype
editSuperTypeMenuText = Edit Supertype
-editSuperTypeToolTip = Edit the selected supertype of the selected node type definition
+editSuperTypeToolTip = Edit the selected supertype of the node type definition
+editSuperTypeMenuText = Edit Supertype
+editValueConstraintMenuText = Edit Value Constraint
+editValueConstraintToolTip = Edit the selected value constraint of the property definition
+errorAddingChildNode = There was an unexpected error adding child node "{0}" to the node type definition.
+errorAddingDefaultValue = There was an unexpected error adding default value "{0}" to the property definition.
errorAddingNamespaceMapping = There was an unexpected error adding namespace mapping "{0}" to the CND.
+errorAddingNodeType = There was an unexpected error adding node type "{0}" to the CND.
+errorAddingProperty = There was an unexpected error adding property "{0}" to the node type definition.
errorAddingRequiredType = There was an unexpected error adding required type "{0}" to the child node definition.
errorAddingSupertype = There was an unexpected error adding supertype "{0}" to the CND.
+errorAddingValueConstraint = There was an unexpected error adding value constraint "{0}" to the property definition.
+errorDeletingChildNode = There was an unexpected error deleting child node "{0}" from the node type definition.
+errorDeletingDefaultValue = There was an unexpected error deleting default value "{0}" from the property definition.
+errorDeletingNamespace = There was an unexpected error deleting namespace with prefix "{0}" from the CND.
+errorDeletingNodeType = There was an unexpected error deleting node type definition "{0}" from the CND.
+errorDeletingProperty = There was an unexpected error deleting property "{0}" from the node type definition.
+errorDeletingSupertype = There was an unexpected error supertype "{0}" from the node type definition.
+errorDeletingValueConstraint = There was an unexpected error deleting value constraint "{0}" from the property definition.
+errorEditingChildNode = There was an unexpected error updating child node "{0}" to the node type definition.\nThe remove command result: {1}. The add command result: {2}.
+errorEditingDefaultValue = There was an unexpected error updating default value "{0}" to the property definition.\nThe remove command result: {1}. The add command result: {2}.
errorEditingNamespaceMapping = There was an unexpected error updating namespace mapping "{0}" to the CND.\nThe remove command result: {1}. The add command result: {2}.
+errorEditingProperty = There was an unexpected error updating property "{0}" to the node type definition.\nThe remove command result: {1}. The add command result: {2}.
errorEditingRequiredType = There was an unexpected error updating required type "{0}" to the CND.\nThe remove command result: {1}. The add command result: {2}.
errorEditingSupertype = There was an unexpected error updating supertype "{0}" to the CND.\nThe remove command result: {1}. The add command result: {2}.
+errorEditingValueConstraint = There was an unexpected error updating value constraint "{0}" to the property definition.\nThe remove command result: {1}. The add command result: {2}.
errorOpeningCndEditor = There was a problem creating the CND editor.
mandatoryAttribute = Mandatory
-mandatoryAttributeToolTip = Indicates if the child node must exist
+mandatoryAttributeToolTip = Indicates if the child node/property must exist
missingValue = <missing>
mixinAttribute = Mixin
mixinAttributeToolTip = Indicates if the node type definition is a mixin and not a primary node type
+multipleAttribute = Multiple
+multipleAttributeToolTip = Indicates if the property is multi-valued
nameLabel = Name:
nameHeaderText = Name
namespaceDialogMsg = Enter a unique prefix and a unique URI.
@@ -124,30 +168,39 @@
namespaceLabel = Namespace:
namespacePrefixHeaderText = Prefix
namespacePrefixLabel = Prefix:
-namespacePrefixToolTip = The prefix of the namespace mapping. Must be unique within a CND.
+namespacePrefixToolTip = The prefix of the namespace mapping. Must be unique within a CND
namespaceUriHeaderText = URI
-namespaceUriToolTip = The URI of the namespace mapping. Must be unique with a CND.
+namespaceUriToolTip = The URI of the namespace mapping. Must be unique with a CND
newNamespaceDialogTitle = New Namespace
+newNodeTypeDialogTitle = New Node Type
newRequiredTypeDialogTitle = New Required Type
newSuperTypeDialogTitle = New Supertype
nodeTypeNamePatternMessage = enter name pattern
nodeTypeNameHeaderText = Node Type Name
nodeTypeNameToolTip = The name of the node type definition
+noFullTextAttribute = Not Full Text Searchable
+noFullTextAttributeToolTip = Indicates if the property does not support full text search
noNameQualifierChoice = <no qualifier>
+noQueryOrderAttribute = Not Query Orderable
+noQueryOrderAttributeToolTip = Indicates if query results of this property cannot be ordered
onParentVersionLabel = On Parent Version:
-onParentVersionToolTip = Indicates what happens to the child node when the parent is created
+onParentVersionToolTip = Indicates what happens to the child node/property when the parent is created
orderableAttribute = Orderable
orderableAttributeToolTip = Indicates if the node type definition's are ordered
propertyAttributesToolTip = The attributes of a property definition (autocreated, mandatory, multiple, nofulltext, noqueryorder, abstract, opv, queryops)
propertyDefaultValuesToolTip = The default values of a property definition
+propertyDialogCreateTitle = Create Property
+propertyDialogEditTitle = Edit Property
+propertyDialogMsg = Specify property definition properties then select OK when finished.
+propertyDialogTitle = Property Definition Editor
propertyNameToolTip = The name or identifier of the property definition
propertyTypeToolTip = The data type of the property definition
propertyValueConstraintsToolTip = The value constraints of a property definition
protectedAttribute = Protected
-protectedAttributeToolTip = Indicates if child nodes of this type are protected from being deleted.
+protectedAttributeToolTip = Indicates if child node/property is protected from being deleted
qualifiedNameDialogMsg = Select a qualifier and edit the name value of the {0}.
qualifiedNameDialogTitle = Qualified Name Editor
-qualifierLabel = Qualifier:
+qualifierLabel = Namespace:
queryableAttribute = Queryable
queryableAttributeToolTip = Indicates if the child node definition supports siblings of the same name
requiredTypesHeaderText = Required Types
@@ -155,9 +208,18 @@
sameNamedSiblingsAttribute = Same Named Siblings
sameNamedSiblingsAttributeToolTip = Indicates if the node type can be queried
supertypesLabel = Supertypes:
+supertypesToolTip = The supertypes (node types and mixins) whose property definitions and child node definitions are inherited
typeHeaderText = Type
+typeLabel = Type:
unqualifiedNameToolTip = The name part of the qualified name (cannot be empty)
validQualifiersToolTip = The qualifiers known to this CND
+valueConstraintDialogCreateMsg = Create Value Constraint
+valueConstraintDialogEditMsg = Edit Value Constraint
+valueConstraintDialogMsg = Specify the value constraint then select OK when finished.
+valueConstraintLabel = Value Constraint:
valueConstraintsHeaderText = Value Constraints
+valueConstraintsLabel = Value Constraints:
+valueConstraintsToolTip = The value constraints of a property are used to limit the allowed values
+valueConstraintToolTip = A value constraint is used to limit the allowed values of a property
+valueEditorDialogTitle = Value Editor
-
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.ui/src/org/jboss/tools/modeshape/ui/UiUtils.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.ui/src/org/jboss/tools/modeshape/ui/UiUtils.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.ui/src/org/jboss/tools/modeshape/ui/UiUtils.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -7,6 +7,9 @@
*/
package org.jboss.tools.modeshape.ui;
+import java.util.Collection;
+import java.util.Iterator;
+
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
@@ -23,6 +26,11 @@
public static final String EMPTY_STRING = ""; //$NON-NLS-1$
/**
+ * A delimiter used to join a collection of object string representations. Default value is "{@value} ".
+ */
+ public static final String DEFAULT_JOIN_DELIMITER = ","; //$NON-NLS-1$
+
+ /**
* The column will be packed using the header text.
*
* @param viewerColumn the viewer column (cannot be <code>null</code>)
@@ -58,6 +66,42 @@
}
/**
+ * An item within the items that are <code>null</code> are treated like an empty string. If a delimiter is not passed in the
+ * {@link #DEFAULT_JOIN_DELIMITER default delimiter} is used.
+ *
+ * @param items the items whose string representation are being joined (cannot be <code>null</code>)
+ * @param delimiter the delimiter separating the items (can be <code>null</code> or empty)
+ * @return the string representation of each item separated by the specified delimiter (never <code>null</code>)
+ * @throws IllegalArgumentException if items is <code>null</code>
+ */
+ public static String join( Collection<?> items,
+ String delimiter ) {
+ if (items == null) {
+ throw new IllegalArgumentException("items is null"); //$NON-NLS-1$
+ }
+
+ delimiter = (((delimiter == null) || delimiter.isEmpty()) ? DEFAULT_JOIN_DELIMITER : delimiter);
+ StringBuilder builder = new StringBuilder();
+
+ for (Iterator<?> itr = items.iterator(); itr.hasNext();) {
+ Object item = itr.next();
+
+ if (item == null) {
+ item = EMPTY_STRING;
+ }
+
+ builder.append(item.toString());
+
+ // add delimiter
+ if (itr.hasNext()) {
+ builder.append(delimiter);
+ }
+ }
+
+ return builder.toString();
+ }
+
+ /**
* @param viewers the viewers whose columns will be packed (cannot be <code>null</code>)
*/
public static void pack( final TableViewer... viewers ) {
Modified: trunk/modeshape/plugins/org.jboss.tools.modeshape.ui/src/org/jboss/tools/modeshape/ui/actions/DelegateAction.java
===================================================================
--- trunk/modeshape/plugins/org.jboss.tools.modeshape.ui/src/org/jboss/tools/modeshape/ui/actions/DelegateAction.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/plugins/org.jboss.tools.modeshape.ui/src/org/jboss/tools/modeshape/ui/actions/DelegateAction.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -27,25 +27,46 @@
* The delegate action (never <code>null</code>).
*/
private final IAction delegate;
+
+ private final boolean styleOverridden;
/**
* @param delegate the delegate action (cannot be <code>null</code>)
*/
public DelegateAction( final IAction delegate ) {
this.delegate = delegate;
+ this.styleOverridden = false;
}
/**
- * @param text
- * @param delegate
+ * Overrides the delegate action's text.
+ *
+ * @param text the action text (can be <code>null</code> or empty)
+ * @param delegate the action delegate (cannot be <code>null</code>)
*/
public DelegateAction( final String text,
final IAction delegate ) {
super(text);
this.delegate = delegate;
+ this.styleOverridden = false;
}
/**
+ * Overrides the delegate action's text and style.
+ *
+ * @param text the action text (can be <code>null</code> or empty)
+ * @param style the action style
+ * @param delegate the action delegate (cannot be <code>null</code>)
+ */
+ public DelegateAction( final String text,
+ final int style,
+ final IAction delegate ) {
+ super(text, style);
+ this.delegate = delegate;
+ this.styleOverridden = true;
+ }
+
+ /**
* {@inheritDoc}
*
* @see org.eclipse.jface.action.IAction#addPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener)
@@ -62,7 +83,7 @@
*/
@Override
public int getAccelerator() {
- if (super.getAccelerator() == -1) {
+ if (super.getAccelerator() == 0) {
return this.delegate.getAccelerator();
}
@@ -188,11 +209,11 @@
*/
@Override
public int getStyle() {
- if (super.getStyle() == IAction.AS_PUSH_BUTTON) {
- return this.delegate.getStyle();
+ if (this.styleOverridden) {
+ return super.getStyle();
}
- return super.getStyle();
+ return this.delegate.getStyle();
}
/**
@@ -211,7 +232,31 @@
/**
* {@inheritDoc}
+ *
+ * @see org.eclipse.jface.action.Action#isChecked()
+ */
+ @Override
+ public boolean isChecked() {
+ if (this.styleOverridden) {
+ return super.isChecked();
+ }
+
+ return this.delegate.isChecked();
+ }
+
+ /**
+ * {@inheritDoc}
*
+ * @see org.eclipse.jface.action.Action#isEnabled()
+ */
+ @Override
+ public boolean isEnabled() {
+ return this.delegate.isEnabled();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
* @see org.eclipse.jface.action.IAction#removePropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener)
*/
@Override
Modified: trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/CndValidatorTest.java
===================================================================
--- trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/CndValidatorTest.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/CndValidatorTest.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -38,30 +38,30 @@
@Test
public void childNodeDefinitionWithEmptyNameShouldBeAnError() {
this.childNodeDefinition.setName(null);
- assertTrue(CndValidator.validateChildNodeDefinition(this.childNodeDefinition).isError());
+ assertTrue(CndValidator.validateChildNodeDefinition(this.childNodeDefinition, null).isError());
this.childNodeDefinition.setName(Utils.EMPTY_STRING);
- assertTrue(CndValidator.validateChildNodeDefinition(this.childNodeDefinition).isError());
+ assertTrue(CndValidator.validateChildNodeDefinition(this.childNodeDefinition, null).isError());
}
@Test
public void childNodeDefinitionWithInvalidDefaultTypeNameShouldBeAnError() {
this.childNodeDefinition.setName("name"); //$NON-NLS-1$
this.childNodeDefinition.setDefaultPrimaryTypeName("missingName:"); //$NON-NLS-1$
- assertTrue(CndValidator.validateChildNodeDefinition(this.childNodeDefinition).isError());
+ assertTrue(CndValidator.validateChildNodeDefinition(this.childNodeDefinition, null).isError());
}
@Test
public void childNodeDefinitionWithInvalidNameShouldBeAnError() {
this.childNodeDefinition.setName("invalid/name"); //$NON-NLS-1$
- assertTrue(CndValidator.validateChildNodeDefinition(this.childNodeDefinition).isError());
+ assertTrue(CndValidator.validateChildNodeDefinition(this.childNodeDefinition, null).isError());
}
@Test
public void childNodeDefinitionWithInvalidRequiredTypeNameShouldBeAnError() {
this.childNodeDefinition.setName("name"); //$NON-NLS-1$
this.childNodeDefinition.addRequiredType("missingName:"); //$NON-NLS-1$
- assertTrue(CndValidator.validateChildNodeDefinition(this.childNodeDefinition).isError());
+ assertTrue(CndValidator.validateChildNodeDefinition(this.childNodeDefinition, null).isError());
}
@Test
@@ -210,10 +210,10 @@
@Test
public void propertyDefinitionWithEmptyNameShouldNotBeValid() {
this.propertyDefinition.setName(null);
- assertTrue(CndValidator.validatePropertyDefinition(this.propertyDefinition).isError());
+ assertTrue(CndValidator.validatePropertyDefinition(this.propertyDefinition, null).isError());
this.propertyDefinition.setName(Utils.EMPTY_STRING);
- assertTrue(CndValidator.validatePropertyDefinition(this.propertyDefinition).isError());
+ assertTrue(CndValidator.validatePropertyDefinition(this.propertyDefinition, null).isError());
}
@Test
@@ -222,13 +222,13 @@
this.propertyDefinition.setType(PropertyType.LONG);
this.propertyDefinition.addDefaultValue("notALongValue"); //$NON-NLS-1$
- assertTrue(CndValidator.validatePropertyDefinition(this.propertyDefinition).isError());
+ assertTrue(CndValidator.validatePropertyDefinition(this.propertyDefinition, null).isError());
}
@Test
public void propertyDefinitionWithInvalidNameShouldBeAnError() {
this.propertyDefinition.setName("invalid/name"); //$NON-NLS-1$
- assertTrue(CndValidator.validatePropertyDefinition(this.propertyDefinition).isError());
+ assertTrue(CndValidator.validatePropertyDefinition(this.propertyDefinition, null).isError());
}
@Test
@@ -237,7 +237,7 @@
this.propertyDefinition.addDefaultValue("defaultValue1"); //$NON-NLS-1$
this.propertyDefinition.addDefaultValue("defaultValue2"); //$NON-NLS-1$
- assertTrue(CndValidator.validatePropertyDefinition(this.propertyDefinition).isError());
+ assertTrue(CndValidator.validatePropertyDefinition(this.propertyDefinition, null).isError());
}
@Test
Modified: trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/Constants.java
===================================================================
--- trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/Constants.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/Constants.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -10,6 +10,8 @@
import java.util.ArrayList;
import java.util.Collection;
+import javax.jcr.PropertyType;
+
import org.jboss.tools.modeshape.jcr.cnd.CndElement.NotationType;
import org.jboss.tools.modeshape.jcr.cnd.CndNotationPreferences.Preference;
import org.jboss.tools.modeshape.jcr.cnd.attributes.Abstract;
@@ -25,6 +27,7 @@
import org.jboss.tools.modeshape.jcr.cnd.attributes.NoQueryOrder;
import org.jboss.tools.modeshape.jcr.cnd.attributes.Orderable;
import org.jboss.tools.modeshape.jcr.cnd.attributes.PrimaryItem;
+import org.jboss.tools.modeshape.jcr.cnd.attributes.PropertyValue;
import org.jboss.tools.modeshape.jcr.cnd.attributes.Protected;
import org.jboss.tools.modeshape.jcr.cnd.attributes.QueryOperators;
import org.jboss.tools.modeshape.jcr.cnd.attributes.QueryOperators.QueryOperator;
@@ -215,24 +218,27 @@
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.ATTRIBUTE_LIST_ELEMENT_DELIMITER) + QUALIFIED_NAME2
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.ATTRIBUTE_LIST_ELEMENT_DELIMITER) + QUALIFIED_NAME3;
+ String VALUE_CONSTRAINT1 = "(19|20)\\d{2}"; //$NON-NLS-1$
+ String VALUE_CONSTRAINT2 = "[$]\\d{1,3}[,]?\\d{3}([.]\\d{2})?"; //$NON-NLS-1$
+ String VALUE_CONSTRAINT3 = "[1,5]"; //$NON-NLS-1$
String VALUE_CONSTRAINTS_VARIANT = ValueConstraints.NOTATION_PREFIX
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.ATTRIBUTE_LIST_PREFIX_END_DELIMITER) + VARIANT;
String VALUE_CONSTRAINTS_ONE_ITEM_FORM = ValueConstraints.NOTATION_PREFIX
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.ATTRIBUTE_LIST_PREFIX_END_DELIMITER)
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.ATTRIBUTE_LIST_QUOTE_CHAR)
- + CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.VALUE_CONSTRAINTS_ITEM_QUOTE_CHARACTER) + ITEM_ONE
+ + CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.VALUE_CONSTRAINTS_ITEM_QUOTE_CHARACTER) + VALUE_CONSTRAINT1
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.VALUE_CONSTRAINTS_ITEM_QUOTE_CHARACTER)
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.ATTRIBUTE_LIST_QUOTE_CHAR);
String VALUE_CONSTRAINTS_THREE_ITEM_FORM = ValueConstraints.NOTATION_PREFIX
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.ATTRIBUTE_LIST_PREFIX_END_DELIMITER)
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.ATTRIBUTE_LIST_QUOTE_CHAR)
- + CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.VALUE_CONSTRAINTS_ITEM_QUOTE_CHARACTER) + ITEM_ONE
+ + CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.VALUE_CONSTRAINTS_ITEM_QUOTE_CHARACTER) + VALUE_CONSTRAINT1
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.VALUE_CONSTRAINTS_ITEM_QUOTE_CHARACTER)
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.ATTRIBUTE_LIST_ELEMENT_DELIMITER)
- + CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.VALUE_CONSTRAINTS_ITEM_QUOTE_CHARACTER) + ITEM_TWO
+ + CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.VALUE_CONSTRAINTS_ITEM_QUOTE_CHARACTER) + VALUE_CONSTRAINT2
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.VALUE_CONSTRAINTS_ITEM_QUOTE_CHARACTER)
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.ATTRIBUTE_LIST_ELEMENT_DELIMITER)
- + CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.VALUE_CONSTRAINTS_ITEM_QUOTE_CHARACTER) + ITEM_THREE
+ + CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.VALUE_CONSTRAINTS_ITEM_QUOTE_CHARACTER) + VALUE_CONSTRAINT3
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.VALUE_CONSTRAINTS_ITEM_QUOTE_CHARACTER)
+ CndNotationPreferences.DEFAULT_PREFERENCES.get(Preference.ATTRIBUTE_LIST_QUOTE_CHAR);
@@ -275,5 +281,17 @@
return qualifiers;
}
+ public static String[] getDefaultQueryOperators() {
+ return new String[] { OPERATOR_ONE.toString(), OPERATOR_TWO.toString(), OPERATOR_THREE.toString() };
+ }
+
+ public static javax.jcr.Value[] getDefaultStringValues() {
+ return new PropertyValue[] { new PropertyValue(PropertyType.STRING, ITEM_ONE),
+ new PropertyValue(PropertyType.STRING, ITEM_TWO), new PropertyValue(PropertyType.STRING, ITEM_THREE) };
+ }
+
+ public static String[] getDefaultValueConstraints() {
+ return new String[] { VALUE_CONSTRAINT1, VALUE_CONSTRAINT2, VALUE_CONSTRAINT3 };
+ }
}
}
Modified: trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinitionTest.java
===================================================================
--- trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinitionTest.java 2012-03-23 14:57:46 UTC (rev 39800)
+++ trunk/modeshape/tests/org.jboss.tools.modeshape.jcr.test/src/org/jboss/tools/modeshape/jcr/cnd/PropertyDefinitionTest.java 2012-03-23 16:56:24 UTC (rev 39801)
@@ -39,157 +39,168 @@
}
@Test
- public void shouldNotHaveDefaultValuesAfterConstruction() {
- assertEquals(0, this.propDefn.getDefaultValues().length);
- }
+ public void copiesShouldBeEqual() {
+ PropertyDefinition thatPropDefn = PropertyDefinition.copy(this.propDefn);
+ assertEquals(this.propDefn, thatPropDefn);
- @Test
- public void shouldNotHaveValueConstraintsAfterConstruction() {
- assertEquals(0, this.propDefn.getValueConstraints().length);
- }
+ this.propDefn.setAvailableQueryOperators(Constants.Helper.getDefaultQueryOperators());
+ thatPropDefn = PropertyDefinition.copy(this.propDefn);
+ assertEquals(this.propDefn, thatPropDefn);
- @Test
- public void shouldNotHaveNameAfterConstruction() {
- assertTrue(Utils.isEmpty(this.propDefn.getName()));
- }
+ this.propDefn.setAutoCreated(!this.propDefn.isAutoCreated());
+ thatPropDefn = PropertyDefinition.copy(this.propDefn);
+ assertEquals(this.propDefn, thatPropDefn);
- @Test
- public void shouldAddDefaultValue() {
- final String VALUE = "value"; //$NON-NLS-1$
- assertTrue(this.propDefn.addDefaultValue(VALUE));
- assertEquals(1, this.propDefn.getDefaultValues().length);
- assertEquals(VALUE, this.propDefn.getDefaultValuesAsStrings().iterator().next());
- }
+ this.propDefn.setDefaultValues(Constants.Helper.getDefaultStringValues());
+ thatPropDefn = PropertyDefinition.copy(this.propDefn);
+ assertEquals(this.propDefn, thatPropDefn);
- @Test
- public void shouldRemoveDefaultValue() {
- final String VALUE = "value"; //$NON-NLS-1$
- assertTrue(this.propDefn.addDefaultValue(VALUE));
- assertTrue(this.propDefn.removeDefaultValue(VALUE));
- assertEquals(0, this.propDefn.getDefaultValues().length);
- }
+ this.propDefn.setFullTextSearchable(!this.propDefn.isFullTextSearchable());
+ thatPropDefn = PropertyDefinition.copy(this.propDefn);
+ assertEquals(this.propDefn, thatPropDefn);
- @Test
- public void shouldNotRemoveDefaultValueThatDoesNotExist() {
- assertFalse(this.propDefn.removeDefaultValue("defaultValueDoesNotExist")); //$NON-NLS-1$
- }
+ this.propDefn.setMandatory(!this.propDefn.isMandatory());
+ thatPropDefn = PropertyDefinition.copy(this.propDefn);
+ assertEquals(this.propDefn, thatPropDefn);
- @Test
- public void shouldReceiveEventAfterRemovingDefaultValue() {
- final String VALUE = "value"; //$NON-NLS-1$
- assertTrue(this.propDefn.addDefaultValue(VALUE));
+ this.propDefn.setMultiple(!this.propDefn.isMultiple());
+ thatPropDefn = PropertyDefinition.copy(this.propDefn);
+ assertEquals(this.propDefn, thatPropDefn);
- Listener l = new Listener();
- assertTrue(this.propDefn.addListener(l));
+ this.propDefn.setName(Constants.QUALIFIED_NAME1.get());
+ thatPropDefn = PropertyDefinition.copy(this.propDefn);
+ assertEquals(this.propDefn, thatPropDefn);
- assertTrue(this.propDefn.removeDefaultValue(VALUE));
- assertEquals(1, l.getCount());
- assertEquals(PropertyName.DEFAULT_VALUES.toString(), l.getPropertyName());
- assertEquals(VALUE, l.getOldValue());
- assertNull(l.getNewValue());
- }
+ this.propDefn.setOnParentVersion(OnParentVersion.COMPUTE.asJcrValue());
+ thatPropDefn = PropertyDefinition.copy(this.propDefn);
+ assertEquals(this.propDefn, thatPropDefn);
- @Test
- public void shouldReceiveEventAfterAddingDefaultValue() {
- Listener l = new Listener();
- assertTrue(this.propDefn.addListener(l));
+ this.propDefn.setProtected(!this.propDefn.isProtected());
+ thatPropDefn = PropertyDefinition.copy(this.propDefn);
+ assertEquals(this.propDefn, thatPropDefn);
- final String VALUE = "value"; //$NON-NLS-1$
- assertTrue(this.propDefn.addDefaultValue(VALUE));
+ this.propDefn.setQueryOrderable(!this.propDefn.isQueryOrderable());
+ thatPropDefn = PropertyDefinition.copy(this.propDefn);
+ assertEquals(this.propDefn, thatPropDefn);
- assertEquals(1, l.getCount());
- assertEquals(PropertyName.DEFAULT_VALUES.toString(), l.getPropertyName());
- assertEquals(VALUE, l.getNewValue());
- assertNull(l.getOldValue());
+ this.propDefn.setRequiredType(PropertyType.BINARY.asJcrValue());
+ thatPropDefn = PropertyDefinition.copy(this.propDefn);
+ assertEquals(this.propDefn, thatPropDefn);
+
+ this.propDefn.setValueConstraints(Constants.Helper.getDefaultValueConstraints());
+ thatPropDefn = PropertyDefinition.copy(this.propDefn);
+ assertEquals(this.propDefn, thatPropDefn);
}
@Test
- public void shouldNotReceiveEventAfterUnregistering() {
- Listener l = new Listener();
- assertTrue(this.propDefn.addListener(l));
- assertTrue(this.propDefn.removeListener(l));
+ public void differentInstancesWithSameValuesShouldBeEqual() {
+ final PropertyDefinition thatPropDefn = new PropertyDefinition();
+ assertEquals(this.propDefn, thatPropDefn);
- final String VALUE = "value"; //$NON-NLS-1$
- assertTrue(this.propDefn.addDefaultValue(VALUE));
+ this.propDefn.setAvailableQueryOperators(Constants.Helper.getDefaultQueryOperators());
+ thatPropDefn.setAvailableQueryOperators(this.propDefn.getAvailableQueryOperators());
+ assertEquals(this.propDefn, thatPropDefn);
- assertEquals(0, l.getCount());
- }
+ this.propDefn.setAutoCreated(!this.propDefn.isAutoCreated());
+ thatPropDefn.setAutoCreated(this.propDefn.isAutoCreated());
+ assertEquals(this.propDefn, thatPropDefn);
- @Test
- public void shouldNotAddSameDefaultValue() {
- final String VALUE = "value"; //$NON-NLS-1$
- assertTrue(this.propDefn.addDefaultValue(VALUE));
- assertFalse(this.propDefn.addDefaultValue(VALUE));
+ this.propDefn.setDefaultValues(Constants.Helper.getDefaultStringValues());
+ thatPropDefn.setDefaultValues(this.propDefn.getDefaultValues());
+ assertEquals(this.propDefn, thatPropDefn);
+
+ this.propDefn.setFullTextSearchable(!this.propDefn.isFullTextSearchable());
+ thatPropDefn.setFullTextSearchable(this.propDefn.isFullTextSearchable());
+ assertEquals(this.propDefn, thatPropDefn);
+
+ this.propDefn.setMandatory(!this.propDefn.isMandatory());
+ thatPropDefn.setMandatory(this.propDefn.isMandatory());
+ assertEquals(this.propDefn, thatPropDefn);
+
+ this.propDefn.setMultiple(!this.propDefn.isMultiple());
+ thatPropDefn.setMultiple(this.propDefn.isMultiple());
+ assertEquals(this.propDefn, thatPropDefn);
+
+ this.propDefn.setName(Constants.QUALIFIED_NAME1.get());
+ thatPropDefn.setName(this.propDefn.getName());
+ assertEquals(this.propDefn, thatPropDefn);
+
+ this.propDefn.setOnParentVersion(OnParentVersion.COMPUTE.asJcrValue());
+ thatPropDefn.setOnParentVersion(this.propDefn.getOnParentVersion());
+ assertEquals(this.propDefn, thatPropDefn);
+
+ this.propDefn.setProtected(!this.propDefn.isProtected());
+ thatPropDefn.setProtected(this.propDefn.isProtected());
+ assertEquals(this.propDefn, thatPropDefn);
+
+ this.propDefn.setQueryOrderable(!this.propDefn.isQueryOrderable());
+ thatPropDefn.setQueryOrderable(this.propDefn.isQueryOrderable());
+ assertEquals(this.propDefn, thatPropDefn);
+
+ this.propDefn.setRequiredType(PropertyType.BINARY.asJcrValue());
+ thatPropDefn.setRequiredType(this.propDefn.getRequiredType());
+ assertEquals(this.propDefn, thatPropDefn);
+
+ this.propDefn.setValueConstraints(Constants.Helper.getDefaultValueConstraints());
+ thatPropDefn.setValueConstraints(this.propDefn.getValueConstraints());
+ assertEquals(this.propDefn, thatPropDefn);
}
@Test
- public void shouldNotUnregisterAnUnregisteredListener() {
- Listener l = new Listener();
- assertFalse(this.propDefn.removeListener(l));
+ public void differentInstancesWithSameValuesShouldHaveSameHashCode() {
+ assertEquals(this.propDefn.hashCode(), new PropertyDefinition().hashCode());
}
@Test
- public void shouldNotRegisterAnAlreadyRegisteredListener() {
- Listener l = new Listener();
- assertTrue(this.propDefn.addListener(l));
- assertFalse(this.propDefn.addListener(l));
+ public void onParentVersionDefaultValueShouldBeCopy() {
+ assertEquals(OnParentVersion.COPY, OnParentVersion.DEFAULT_VALUE);
}
@Test
- public void shouldAddValueConstraint() {
- final String CONSTRAINT = "constraint"; //$NON-NLS-1$
- assertTrue(this.propDefn.addValueConstraint(CONSTRAINT));
- assertEquals(1, this.propDefn.getValueConstraints().length);
- assertEquals(CONSTRAINT, this.propDefn.getValueConstraints()[0]);
+ public void onParentVersionShouldBeSetToDefaultAfterConstruction() {
+ assertTrue(this.propDefn.getOnParentVersion() == OnParentVersion.DEFAULT_VALUE.asJcrValue());
}
@Test
- public void shouldReceiveEventAfterAddingValueConstraint() {
- Listener l = new Listener();
- assertTrue(this.propDefn.addListener(l));
-
- final String CONSTRAINT = "constraint"; //$NON-NLS-1$
- assertTrue(this.propDefn.addValueConstraint(CONSTRAINT));
-
- assertEquals(1, l.getCount());
- assertEquals(PropertyName.VALUE_CONSTRAINTS.toString(), l.getPropertyName());
- assertEquals(CONSTRAINT, l.getNewValue());
- assertNull(l.getOldValue());
+ public void propertyTypeDefaultValueShouldBeString() {
+ assertEquals(PropertyType.STRING, PropertyType.DEFAULT_VALUE);
}
@Test
- public void shouldNotAddSameValueConstraint() {
- final String CONSTRAINT = "constraint"; //$NON-NLS-1$
- assertTrue(this.propDefn.addValueConstraint(CONSTRAINT));
- assertFalse(this.propDefn.addValueConstraint(CONSTRAINT));
+ public void propertyTypeShouldBeSetToDefaultAfterConstruction() {
+ assertTrue(this.propDefn.getType() == PropertyType.DEFAULT_VALUE);
+ assertEquals(PropertyType.DEFAULT_VALUE.asJcrValue(), this.propDefn.getRequiredType());
}
@Test
- public void shouldRemoveValueConstraint() {
- final String CONSTRAINT = "constraint"; //$NON-NLS-1$
- assertTrue(this.propDefn.addValueConstraint(CONSTRAINT));
- assertTrue(this.propDefn.removeValueConstraint(CONSTRAINT));
- assertEquals(0, this.propDefn.getValueConstraints().length);
+ public void shouldAddDefaultValue() {
+ final String VALUE = "value"; //$NON-NLS-1$
+ assertTrue(this.propDefn.addDefaultValue(VALUE));
+ assertEquals(1, this.propDefn.getDefaultValues().length);
+ assertEquals(VALUE, this.propDefn.getDefaultValuesAsStrings().iterator().next());
}
@Test
- public void shouldNotRemoveValueConstraintThatDoesNotExist() {
- assertFalse(this.propDefn.removeValueConstraint("valueConstraintdoesNotExist")); //$NON-NLS-1$
+ public void shouldAddQueryOperator() {
+ final QueryOperator OP = QueryOperator.GREATER_THAN_EQUALS;
+ assertTrue(this.propDefn.addQueryOperator(OP));
+ assertEquals(1, this.propDefn.getAvailableQueryOperators().length);
+ assertEquals(OP.toString(), this.propDefn.getAvailableQueryOperators()[0]);
}
@Test
- public void shouldReceiveEventAfterRemovingValueConstraint() {
+ public void shouldAddValueConstraint() {
final String CONSTRAINT = "constraint"; //$NON-NLS-1$
assertTrue(this.propDefn.addValueConstraint(CONSTRAINT));
+ assertEquals(1, this.propDefn.getValueConstraints().length);
+ assertEquals(CONSTRAINT, this.propDefn.getValueConstraints()[0]);
+ }
- Listener l = new Listener();
- assertTrue(this.propDefn.addListener(l));
+ @Test
+ public void shouldAllowNullEmptyName() {
+ this.propDefn.setName(null);
+ this.propDefn.setName(""); //$NON-NLS-1$
- assertTrue(this.propDefn.removeValueConstraint(CONSTRAINT));
- assertEquals(1, l.getCount());
- assertEquals(PropertyName.VALUE_CONSTRAINTS.toString(), l.getPropertyName());
- assertEquals(CONSTRAINT, l.getOldValue());
- assertNull(l.getNewValue());
}
@Test
@@ -345,31 +356,36 @@
}
@Test
- public void shouldNotClearDefaultValuesWhenEmpty() {
- assertFalse(this.propDefn.clearDefaultValues());
+ public void shouldClearValueConstraints() {
+ assertTrue(this.propDefn.addValueConstraint("value")); //$NON-NLS-1$
+ assertTrue(this.propDefn.clearValueConstraints());
+ assertEquals(0, this.propDefn.getValueConstraints().length);
}
@Test
- public void shouldReceiveEventAfterClearingDefaultValues() {
+ public void shouldNotAddDuplicateQueryOperator() {
+ final QueryOperator OP = QueryOperator.GREATER_THAN_EQUALS;
+ assertTrue(this.propDefn.addQueryOperator(OP));
+ assertFalse(this.propDefn.addQueryOperator(OP));
+ }
+
+ @Test
+ public void shouldNotAddSameDefaultValue() {
final String VALUE = "value"; //$NON-NLS-1$
assertTrue(this.propDefn.addDefaultValue(VALUE));
- Collection<String> oldValue = Collections.singletonList(VALUE);
+ assertFalse(this.propDefn.addDefaultValue(VALUE));
+ }
- Listener l = new Listener();
- assertTrue(this.propDefn.addListener(l));
-
- assertTrue(this.propDefn.clearDefaultValues());
- assertEquals(1, l.getCount());
- assertEquals(PropertyName.DEFAULT_VALUES.toString(), l.getPropertyName());
- assertNull(l.getNewValue());
- assertEquals(oldValue, l.getOldValue());
+ @Test
+ public void shouldNotAddSameValueConstraint() {
+ final String CONSTRAINT = "constraint"; //$NON-NLS-1$
+ assertTrue(this.propDefn.addValueConstraint(CONSTRAINT));
+ assertFalse(this.propDefn.addValueConstraint(CONSTRAINT));
}
@Test
- public void shouldClearValueConstraints() {
- assertTrue(this.propDefn.addValueConstraint("value")); //$NON-NLS-1$
- assertTrue(this.propDefn.clearValueConstraints());
- assertEquals(0, this.propDefn.getValueConstraints().length);
+ public void shouldNotClearDefaultValuesWhenEmpty() {
+ assertFalse(this.propDefn.clearDefaultValues());
}
@Test
@@ -378,162 +394,192 @@
}
@Test
- public void shouldReceiveEventAfterClearingValueConstraints() {
- final String CONSTRAINT = "constraint"; //$NON-NLS-1$
- assertTrue(this.propDefn.addValueConstraint(CONSTRAINT));
- Collection<String> oldValue = Collections.singletonList(CONSTRAINT);
+ public void shouldNotHaveDefaultValuesAfterConstruction() {
+ assertEquals(0, this.propDefn.getDefaultValues().length);
+ }
- Listener l = new Listener();
- assertTrue(this.propDefn.addListener(l));
+ @Test
+ public void shouldNotHaveNameAfterConstruction() {
+ assertTrue(Utils.isEmpty(this.propDefn.getName()));
+ }
- assertTrue(this.propDefn.clearValueConstraints());
- assertEquals(1, l.getCount());
- assertEquals(PropertyName.VALUE_CONSTRAINTS.toString(), l.getPropertyName());
- assertNull(l.getNewValue());
- assertEquals(oldValue, l.getOldValue());
+ @Test
+ public void shouldNotHaveValueConstraintsAfterConstruction() {
+ assertEquals(0, this.propDefn.getValueConstraints().length);
}
@Test
- public void shouldSetAutoCreated() {
- this.propDefn.setAutoCreated(true);
- assertTrue(this.propDefn.isAutoCreated());
- assertTrue(this.propDefn.getState(PropertyName.AUTOCREATED) == Value.IS);
+ public void shouldNotReceiveEventAfterUnregistering() {
+ final Listener l = new Listener();
+ assertTrue(this.propDefn.addListener(l));
+ assertTrue(this.propDefn.removeListener(l));
- this.propDefn.setAutoCreated(false);
- assertFalse(this.propDefn.isAutoCreated());
- assertTrue(this.propDefn.getState(PropertyName.AUTOCREATED) == Value.IS_NOT);
+ final String VALUE = "value"; //$NON-NLS-1$
+ assertTrue(this.propDefn.addDefaultValue(VALUE));
+
+ assertEquals(0, l.getCount());
}
@Test
- public void shouldSetFullTextSearchable() {
- this.propDefn.setFullTextSearchable(true);
- assertTrue(this.propDefn.isFullTextSearchable());
- assertTrue(this.propDefn.getState(PropertyName.NO_FULL_TEXT) == Value.IS_NOT);
+ public void shouldNotReceiveEventWhenNameIsNotChanged() {
+ final String NAME = "name"; //$NON-NLS-1$
+ this.propDefn.setName(NAME);
- this.propDefn.setFullTextSearchable(false);
- assertFalse(this.propDefn.isFullTextSearchable());
- assertTrue(this.propDefn.getState(PropertyName.NO_FULL_TEXT) == Value.IS);
+ final Listener l = new Listener();
+ assertTrue(this.propDefn.addListener(l));
+
+ this.propDefn.setName(NAME); // same value
+ assertEquals(0, l.getCount());
}
@Test
- public void shouldSetMandatory() {
- this.propDefn.setMandatory(true);
- assertTrue(this.propDefn.isMandatory());
- assertTrue(this.propDefn.getState(PropertyName.MANDATORY) == Value.IS);
+ public void shouldNotRegisterAnAlreadyRegisteredListener() {
+ final Listener l = new Listener();
+ assertTrue(this.propDefn.addListener(l));
+ assertFalse(this.propDefn.addListener(l));
+ }
- this.propDefn.setMandatory(false);
- assertFalse(this.propDefn.isMandatory());
- assertTrue(this.propDefn.getState(PropertyName.MANDATORY) == Value.IS_NOT);
+ @Test
+ public void shouldNotRemoveDefaultValueThatDoesNotExist() {
+ assertFalse(this.propDefn.removeDefaultValue("defaultValueDoesNotExist")); //$NON-NLS-1$
}
@Test
- public void shouldSetMultiple() {
- this.propDefn.setMultiple(true);
- assertTrue(this.propDefn.isMultiple());
- assertTrue(this.propDefn.getState(PropertyName.MULTIPLE) == Value.IS);
-
- this.propDefn.setMultiple(false);
- assertFalse(this.propDefn.isMultiple());
- assertTrue(this.propDefn.getState(PropertyName.MULTIPLE) == Value.IS_NOT);
+ public void shouldNotRemoveQueryOperatorThatDoesNotExist() {
+ assertFalse(this.propDefn.removeQueryOperator(QueryOperator.GREATER_THAN_EQUALS));
}
@Test
- public void shouldSetProtected() {
- this.propDefn.setProtected(true);
- assertTrue(this.propDefn.isProtected());
- assertTrue(this.propDefn.getState(PropertyName.PROTECTED) == Value.IS);
-
- this.propDefn.setProtected(false);
- assertFalse(this.propDefn.isProtected());
- assertTrue(this.propDefn.getState(PropertyName.PROTECTED) == Value.IS_NOT);
+ public void shouldNotRemoveValueConstraintThatDoesNotExist() {
+ assertFalse(this.propDefn.removeValueConstraint("valueConstraintdoesNotExist")); //$NON-NLS-1$
}
@Test
- public void shouldSetQueryOrderable() {
- this.propDefn.setQueryOrderable(true);
- assertTrue(this.propDefn.isQueryOrderable());
- assertTrue(this.propDefn.getState(PropertyName.NO_QUERY_ORDER) == Value.IS_NOT);
+ public void shouldNotSetInvalidQueryOperators() {
+ final String GOOD_OP = QueryOperator.EQUALS.toString();
+ final String BAD_OP = "badOp"; //$NON-NLS-1$
+ final String[] NEW_OPERATORS = new String[] { GOOD_OP, BAD_OP };
+ this.propDefn.setAvailableQueryOperators(NEW_OPERATORS);
- this.propDefn.setQueryOrderable(false);
- assertFalse(this.propDefn.isQueryOrderable());
- assertTrue(this.propDefn.getState(PropertyName.NO_QUERY_ORDER) == Value.IS);
+ final String[] queryOperators = this.propDefn.getAvailableQueryOperators();
+ assertEquals((NEW_OPERATORS.length - 1), queryOperators.length);
+ assertEquals(NEW_OPERATORS[0], queryOperators[0]);
}
@Test
- public void shouldSetName() {
- final String NAME = "name"; //$NON-NLS-1$
- this.propDefn.setName(NAME);
- assertEquals(NAME, this.propDefn.getName());
-
+ public void shouldNotUnregisterAnUnregisteredListener() {
+ final Listener l = new Listener();
+ assertFalse(this.propDefn.removeListener(l));
}
@Test
- public void shouldAllowNullEmptyName() {
- this.propDefn.setName(null);
- this.propDefn.setName(""); //$NON-NLS-1$
+ public void shouldReceiveEventAfterAddingDefaultValue() {
+ final Listener l = new Listener();
+ assertTrue(this.propDefn.addListener(l));
+ final String VALUE = "value"; //$NON-NLS-1$
+ assertTrue(this.propDefn.addDefaultValue(VALUE));
+
+ assertEquals(1, l.getCount());
+ assertEquals(PropertyName.DEFAULT_VALUES.toString(), l.getPropertyName());
+ assertEquals(VALUE, l.getNewValue());
+ assertNull(l.getOldValue());
}
@Test
- public void shouldReceiveEventWhenNameIsChanged() {
- Listener l = new Listener();
+ public void shouldReceiveEventAfterAddingValueConstraint() {
+ final Listener l = new Listener();
assertTrue(this.propDefn.addListener(l));
- final String NEW_NAME = "name"; //$NON-NLS-1$
- this.propDefn.setName(NEW_NAME);
+ final String CONSTRAINT = "constraint"; //$NON-NLS-1$
+ assertTrue(this.propDefn.addValueConstraint(CONSTRAINT));
- assertEquals(NEW_NAME, this.propDefn.getName());
assertEquals(1, l.getCount());
- assertEquals(PropertyName.NAME.toString(), l.getPropertyName());
- assertEquals(NEW_NAME, l.getNewValue());
+ assertEquals(PropertyName.VALUE_CONSTRAINTS.toString(), l.getPropertyName());
+ assertEquals(CONSTRAINT, l.getNewValue());
assertNull(l.getOldValue());
}
@Test
- public void shouldNotReceiveEventWhenNameIsNotChanged() {
- final String NAME = "name"; //$NON-NLS-1$
- this.propDefn.setName(NAME);
+ public void shouldReceiveEventAfterClearingDefaultValues() {
+ final String VALUE = "value"; //$NON-NLS-1$
+ assertTrue(this.propDefn.addDefaultValue(VALUE));
+ final Collection<String> oldValue = Collections.singletonList(VALUE);
- Listener l = new Listener();
+ final Listener l = new Listener();
assertTrue(this.propDefn.addListener(l));
- this.propDefn.setName(NAME); // same value
- assertEquals(0, l.getCount());
+ assertTrue(this.propDefn.clearDefaultValues());
+ assertEquals(1, l.getCount());
+ assertEquals(PropertyName.DEFAULT_VALUES.toString(), l.getPropertyName());
+ assertNull(l.getNewValue());
+ assertEquals(oldValue, l.getOldValue());
}
@Test
- public void onParentVersionShouldBeSetToDefaultAfterConstruction() {
- assertTrue(this.propDefn.getOnParentVersion() == OnParentVersion.DEFAULT_VALUE.asJcrValue());
+ public void shouldReceiveEventAfterClearingValueConstraints() {
+ final String CONSTRAINT = "constraint"; //$NON-NLS-1$
+ assertTrue(this.propDefn.addValueConstraint(CONSTRAINT));
+ final Collection<String> oldValue = Collections.singletonList(CONSTRAINT);
+
+ final Listener l = new Listener();
+ assertTrue(this.propDefn.addListener(l));
+
+ assertTrue(this.propDefn.clearValueConstraints());
+ assertEquals(1, l.getCount());
+ assertEquals(PropertyName.VALUE_CONSTRAINTS.toString(), l.getPropertyName());
+ assertNull(l.getNewValue());
+ assertEquals(oldValue, l.getOldValue());
}
@Test
- public void onParentVersionDefaultValueShouldBeCopy() {
- assertEquals(OnParentVersion.COPY, OnParentVersion.DEFAULT_VALUE);
+ public void shouldReceiveEventAfterRemovingDefaultValue() {
+ final String VALUE = "value"; //$NON-NLS-1$
+ assertTrue(this.propDefn.addDefaultValue(VALUE));
+
+ final Listener l = new Listener();
+ assertTrue(this.propDefn.addListener(l));
+
+ assertTrue(this.propDefn.removeDefaultValue(VALUE));
+ assertEquals(1, l.getCount());
+ assertEquals(PropertyName.DEFAULT_VALUES.toString(), l.getPropertyName());
+ assertEquals(VALUE, l.getOldValue());
+ assertNull(l.getNewValue());
}
@Test
- public void shouldSetOnParentVersionUsingInt() {
- for (OnParentVersion opv : OnParentVersion.values()) {
- if (opv != OnParentVersion.VARIANT) {
- this.propDefn.setOnParentVersion(opv.asJcrValue());
- assertEquals(opv.asJcrValue(), this.propDefn.getOnParentVersion());
- }
- }
+ public void shouldReceiveEventAfterRemovingValueConstraint() {
+ final String CONSTRAINT = "constraint"; //$NON-NLS-1$
+ assertTrue(this.propDefn.addValueConstraint(CONSTRAINT));
+
+ final Listener l = new Listener();
+ assertTrue(this.propDefn.addListener(l));
+
+ assertTrue(this.propDefn.removeValueConstraint(CONSTRAINT));
+ assertEquals(1, l.getCount());
+ assertEquals(PropertyName.VALUE_CONSTRAINTS.toString(), l.getPropertyName());
+ assertEquals(CONSTRAINT, l.getOldValue());
+ assertNull(l.getNewValue());
}
@Test
- public void shouldSetOnParentVersionUsingString() {
- for (OnParentVersion opv : OnParentVersion.values()) {
- if (opv != OnParentVersion.VARIANT) {
- assertTrue(this.propDefn.setOnParentVersion(opv.toString()));
- assertEquals(opv.asJcrValue(), this.propDefn.getOnParentVersion());
- }
- }
+ public void shouldReceiveEventWhenNameIsChanged() {
+ final Listener l = new Listener();
+ assertTrue(this.propDefn.addListener(l));
+
+ final String NEW_NAME = "name"; //$NON-NLS-1$
+ this.propDefn.setName(NEW_NAME);
+
+ assertEquals(NEW_NAME, this.propDefn.getName());
+ assertEquals(1, l.getCount());
+ assertEquals(PropertyName.NAME.toString(), l.getPropertyName());
+ assertEquals(NEW_NAME, l.getNewValue());
+ assertNull(l.getOldValue());
}
@Test
public void shouldReceiveEventWhenOnParentVersionIsChanged() {
- Listener l = new Listener();
+ final Listener l = new Listener();
assertTrue(this.propDefn.addListener(l));
final int OPV = OnParentVersion.COMPUTE.asJcrValue();
@@ -546,39 +592,8 @@
}
@Test
- public void propertyTypeShouldBeSetToDefaultAfterConstruction() {
- assertTrue(this.propDefn.getType() == PropertyType.DEFAULT_VALUE);
- assertEquals(PropertyType.DEFAULT_VALUE.asJcrValue(), this.propDefn.getRequiredType());
- }
-
- @Test
- public void propertyTypeDefaultValueShouldBeString() {
- assertEquals(PropertyType.STRING, PropertyType.DEFAULT_VALUE);
- }
-
- @Test
- public void shouldSetPropertyTypeUsingInt() {
- for (PropertyType type : PropertyType.values()) {
- if (type != PropertyType.VARIANT) {
- this.propDefn.setRequiredType(type.asJcrValue());
- assertEquals(type.asJcrValue(), this.propDefn.getRequiredType());
- }
- }
- }
-
- @Test
- public void shouldSetPropertyType() {
- for (PropertyType type : PropertyType.values()) {
- if (type != PropertyType.VARIANT) {
- assertTrue(this.propDefn.setType(type));
- assertEquals(type.asJcrValue(), this.propDefn.getRequiredType());
- }
- }
- }
-
- @Test
public void shouldReceiveEventWhenPropertyTypeIsChanged() {
- Listener l = new Listener();
+ final Listener l = new Listener();
assertTrue(this.propDefn.addListener(l));
final PropertyType TYPE = PropertyType.BINARY;
@@ -591,48 +606,69 @@
}
@Test
- public void shouldSetValueContraintsWithNull() {
- this.propDefn.setValueConstraints(null);
- assertEquals(0, this.propDefn.getValueConstraints().length);
- }
+ public void shouldReceiveEventWhenQueryOperatorIsAdded() {
+ final Listener l = new Listener();
+ assertTrue(this.propDefn.addListener(l));
- @Test
- public void shouldSetValueContraintsWithEmptyArray() {
- this.propDefn.setValueConstraints(new String[0]);
- assertEquals(0, this.propDefn.getValueConstraints().length);
+ final QueryOperator OP = QueryOperator.GREATER_THAN_EQUALS;
+ assertTrue(this.propDefn.addQueryOperator(OP));
+
+ assertEquals(1, l.getCount());
+ assertEquals(PropertyName.QUERY_OPS.toString(), l.getPropertyName());
+ assertEquals(OP, l.getNewValue());
+ assertNull(l.getOldValue());
}
@Test
- public void shouldSetValueContraints() {
- assertTrue(this.propDefn.addValueConstraint("constraintBeingOverridden")); //$NON-NLS-1$
+ public void shouldReceiveEventWhenQueryOperatorIsRemoved() {
+ final QueryOperator OP = QueryOperator.GREATER_THAN_EQUALS;
+ assertTrue(this.propDefn.addQueryOperator(OP));
- final String CONSTRAINT1 = "constraint1"; //$NON-NLS-1$
- final String CONSTRAINT2 = "constraint2"; //$NON-NLS-1$
- final String CONSTRAINT3 = "constraint3"; //$NON-NLS-1$
- final String[] NEW_CONSTRAINTS = new String[] { CONSTRAINT1, CONSTRAINT2, CONSTRAINT3 };
- this.propDefn.setValueConstraints(NEW_CONSTRAINTS);
+ final Listener l = new Listener();
+ assertTrue(this.propDefn.addListener(l));
- String[] constraints = this.propDefn.getValueConstraints();
- assertEquals(NEW_CONSTRAINTS.length, constraints.length);
-
- for (int i = 0; i < NEW_CONSTRAINTS.length; ++i) {
- assertEquals(NEW_CONSTRAINTS[i], constraints[i]);
- }
+ assertTrue(this.propDefn.removeQueryOperator(OP));
+ assertEquals(1, l.getCount());
+ assertEquals(PropertyName.QUERY_OPS.toString(), l.getPropertyName());
+ assertNull(l.getNewValue());
+ assertEquals(OP, l.getOldValue());
}
@Test
- public void shouldSetDefaultValuesWithNull() {
- this.propDefn.setDefaultValues(null);
+ public void shouldRemoveDefaultValue() {
+ final String VALUE = "value"; //$NON-NLS-1$
+ assertTrue(this.propDefn.addDefaultValue(VALUE));
+ assertTrue(this.propDefn.removeDefaultValue(VALUE));
assertEquals(0, this.propDefn.getDefaultValues().length);
}
@Test
- public void shouldSetDefaultValuesWithEmptyArray() {
- this.propDefn.setDefaultValues(new javax.jcr.Value[0]);
- assertEquals(0, this.propDefn.getDefaultValues().length);
+ public void shouldRemoveQueryOperator() {
+ final QueryOperator OP = QueryOperator.GREATER_THAN_EQUALS;
+ assertTrue(this.propDefn.addQueryOperator(OP));
+ assertTrue(this.propDefn.removeQueryOperator(OP));
}
@Test
+ public void shouldRemoveValueConstraint() {
+ final String CONSTRAINT = "constraint"; //$NON-NLS-1$
+ assertTrue(this.propDefn.addValueConstraint(CONSTRAINT));
+ assertTrue(this.propDefn.removeValueConstraint(CONSTRAINT));
+ assertEquals(0, this.propDefn.getValueConstraints().length);
+ }
+
+ @Test
+ public void shouldSetAutoCreated() {
+ this.propDefn.setAutoCreated(true);
+ assertTrue(this.propDefn.isAutoCreated());
+ assertTrue(this.propDefn.getState(PropertyName.AUTOCREATED) == Value.IS);
+
+ this.propDefn.setAutoCreated(false);
+ assertFalse(this.propDefn.isAutoCreated());
+ assertTrue(this.propDefn.getState(PropertyName.AUTOCREATED) == Value.IS_NOT);
+ }
+
+ @Test
public void shouldSetDefaultValues() {
assertTrue(this.propDefn.addDefaultValue("defaultValueBeingOverridden")); //$NON-NLS-1$
@@ -642,7 +678,7 @@
final PropertyValue[] NEW_VALUES = new PropertyValue[] { VALUE1, VALUE2, VALUE3 };
this.propDefn.setDefaultValues(NEW_VALUES);
- javax.jcr.Value[] defaultValues = this.propDefn.getDefaultValues();
+ final javax.jcr.Value[] defaultValues = this.propDefn.getDefaultValues();
assertEquals(NEW_VALUES.length, defaultValues.length);
for (int i = 0; i < NEW_VALUES.length; ++i) {
@@ -653,71 +689,107 @@
}
@Test
- public void shouldSetQueryOperatorsWithNull() {
- this.propDefn.setAvailableQueryOperators(null);
- assertEquals(0, this.propDefn.getAvailableQueryOperators().length);
+ public void shouldSetDefaultValuesWithEmptyArray() {
+ this.propDefn.setDefaultValues(new javax.jcr.Value[0]);
+ assertEquals(0, this.propDefn.getDefaultValues().length);
}
@Test
- public void shouldSetQueryOperatorsWithEmptyArray() {
- this.propDefn.setAvailableQueryOperators(new String[0]);
- assertEquals(0, this.propDefn.getAvailableQueryOperators().length);
+ public void shouldSetDefaultValuesWithNull() {
+ this.propDefn.setDefaultValues(null);
+ assertEquals(0, this.propDefn.getDefaultValues().length);
}
@Test
- public void shouldAddQueryOperator() {
- final QueryOperator OP = QueryOperator.GREATER_THAN_EQUALS;
- assertTrue(this.propDefn.addQueryOperator(OP));
- assertEquals(1, this.propDefn.getAvailableQueryOperators().length);
- assertEquals(OP.toString(), this.propDefn.getAvailableQueryOperators()[0]);
+ public void shouldSetFullTextSearchable() {
+ this.propDefn.setFullTextSearchable(true);
+ assertTrue(this.propDefn.isFullTextSearchable());
+ assertTrue(this.propDefn.getState(PropertyName.NO_FULL_TEXT) == Value.IS_NOT);
+
+ this.propDefn.setFullTextSearchable(false);
+ assertFalse(this.propDefn.isFullTextSearchable());
+ assertTrue(this.propDefn.getState(PropertyName.NO_FULL_TEXT) == Value.IS);
}
@Test
- public void shouldRemoveQueryOperator() {
- final QueryOperator OP = QueryOperator.GREATER_THAN_EQUALS;
- assertTrue(this.propDefn.addQueryOperator(OP));
- assertTrue(this.propDefn.removeQueryOperator(OP));
+ public void shouldSetMandatory() {
+ this.propDefn.setMandatory(true);
+ assertTrue(this.propDefn.isMandatory());
+ assertTrue(this.propDefn.getState(PropertyName.MANDATORY) == Value.IS);
+
+ this.propDefn.setMandatory(false);
+ assertFalse(this.propDefn.isMandatory());
+ assertTrue(this.propDefn.getState(PropertyName.MANDATORY) == Value.IS_NOT);
}
@Test
- public void shouldNotRemoveQueryOperatorThatDoesNotExist() {
- assertFalse(this.propDefn.removeQueryOperator(QueryOperator.GREATER_THAN_EQUALS));
+ public void shouldSetMultiple() {
+ this.propDefn.setMultiple(true);
+ assertTrue(this.propDefn.isMultiple());
+ assertTrue(this.propDefn.getState(PropertyName.MULTIPLE) == Value.IS);
+
+ this.propDefn.setMultiple(false);
+ assertFalse(this.propDefn.isMultiple());
+ assertTrue(this.propDefn.getState(PropertyName.MULTIPLE) == Value.IS_NOT);
}
@Test
- public void shouldNotAddDuplicateQueryOperator() {
- final QueryOperator OP = QueryOperator.GREATER_THAN_EQUALS;
- assertTrue(this.propDefn.addQueryOperator(OP));
- assertFalse(this.propDefn.addQueryOperator(OP));
+ public void shouldSetName() {
+ final String NAME = "name"; //$NON-NLS-1$
+ this.propDefn.setName(NAME);
+ assertEquals(NAME, this.propDefn.getName());
+
}
@Test
- public void shouldReceiveEventWhenQueryOperatorIsAdded() {
- Listener l = new Listener();
- assertTrue(this.propDefn.addListener(l));
+ public void shouldSetOnParentVersionUsingInt() {
+ for (final OnParentVersion opv : OnParentVersion.values()) {
+ if (opv != OnParentVersion.VARIANT) {
+ this.propDefn.setOnParentVersion(opv.asJcrValue());
+ assertEquals(opv.asJcrValue(), this.propDefn.getOnParentVersion());
+ }
+ }
+ }
- final QueryOperator OP = QueryOperator.GREATER_THAN_EQUALS;
- assertTrue(this.propDefn.addQueryOperator(OP));
+ @Test
+ public void shouldSetOnParentVersionUsingString() {
+ for (final OnParentVersion opv : OnParentVersion.values()) {
+ if (opv != OnParentVersion.VARIANT) {
+ assertTrue(this.propDefn.setOnParentVersion(opv.toString()));
+ assertEquals(opv.asJcrValue(), this.propDefn.getOnParentVersion());
+ }
+ }
+ }
- assertEquals(1, l.getCount());
- assertEquals(PropertyName.QUERY_OPS.toString(), l.getPropertyName());
- assertEquals(OP, l.getNewValue());
- assertNull(l.getOldValue());
+ @Test
+ public void shouldSetPropertyType() {
+ for (final PropertyType type : PropertyType.values()) {
+ if (type != PropertyType.VARIANT) {
+ assertTrue(this.propDefn.setType(type));
+ assertEquals(type.asJcrValue(), this.propDefn.getRequiredType());
+ }
+ }
}
@Test
- public void shouldReceiveEventWhenQueryOperatorIsRemoved() {
- final QueryOperator OP = QueryOperator.GREATER_THAN_EQUALS;
- assertTrue(this.propDefn.addQueryOperator(OP));
+ public void shouldSetPropertyTypeUsingInt() {
+ for (final PropertyType type : PropertyType.values()) {
+ if (type != PropertyType.VARIANT) {
+ this.propDefn.setRequiredType(type.asJcrValue());
+ assertEquals(type.asJcrValue(), this.propDefn.getRequiredType());
+ }
+ }
+ }
- Listener l = new Listener();
- assertTrue(this.propDefn.addListener(l));
+ @Test
+ public void shouldSetProtected() {
+ this.propDefn.setProtected(true);
+ assertTrue(this.propDefn.isProtected());
+ assertTrue(this.propDefn.getState(PropertyName.PROTECTED) == Value.IS);
- assertTrue(this.propDefn.removeQueryOperator(OP));
- assertEquals(1, l.getCount());
- assertEquals(PropertyName.QUERY_OPS.toString(), l.getPropertyName());
- assertNull(l.getNewValue());
- assertEquals(OP, l.getOldValue());
+ this.propDefn.setProtected(false);
+ assertFalse(this.propDefn.isProtected());
+ assertTrue(this.propDefn.getState(PropertyName.PROTECTED) == Value.IS_NOT);
}
@Test
@@ -730,7 +802,7 @@
final String[] NEW_OPERATORS = new String[] { OP1, OP2, OP3 };
this.propDefn.setAvailableQueryOperators(NEW_OPERATORS);
- String[] queryOperators = this.propDefn.getAvailableQueryOperators();
+ final String[] queryOperators = this.propDefn.getAvailableQueryOperators();
assertEquals(NEW_OPERATORS.length, queryOperators.length);
for (int i = 0; i < NEW_OPERATORS.length; ++i) {
@@ -739,15 +811,55 @@
}
@Test
- public void shouldNotSetInvalidQueryOperators() {
- final String GOOD_OP = QueryOperator.EQUALS.toString();
- final String BAD_OP = "badOp"; //$NON-NLS-1$
- final String[] NEW_OPERATORS = new String[] { GOOD_OP, BAD_OP };
- this.propDefn.setAvailableQueryOperators(NEW_OPERATORS);
+ public void shouldSetQueryOperatorsWithEmptyArray() {
+ this.propDefn.setAvailableQueryOperators(new String[0]);
+ assertEquals(0, this.propDefn.getAvailableQueryOperators().length);
+ }
- String[] queryOperators = this.propDefn.getAvailableQueryOperators();
- assertEquals((NEW_OPERATORS.length - 1), queryOperators.length);
- assertEquals(NEW_OPERATORS[0], queryOperators[0]);
+ @Test
+ public void shouldSetQueryOperatorsWithNull() {
+ this.propDefn.setAvailableQueryOperators(null);
+ assertEquals(0, this.propDefn.getAvailableQueryOperators().length);
}
+ @Test
+ public void shouldSetQueryOrderable() {
+ this.propDefn.setQueryOrderable(true);
+ assertTrue(this.propDefn.isQueryOrderable());
+ assertTrue(this.propDefn.getState(PropertyName.NO_QUERY_ORDER) == Value.IS_NOT);
+
+ this.propDefn.setQueryOrderable(false);
+ assertFalse(this.propDefn.isQueryOrderable());
+ assertTrue(this.propDefn.getState(PropertyName.NO_QUERY_ORDER) == Value.IS);
+ }
+
+ @Test
+ public void shouldSetValueContraints() {
+ assertTrue(this.propDefn.addValueConstraint("constraintBeingOverridden")); //$NON-NLS-1$
+
+ final String CONSTRAINT1 = "constraint1"; //$NON-NLS-1$
+ final String CONSTRAINT2 = "constraint2"; //$NON-NLS-1$
+ final String CONSTRAINT3 = "constraint3"; //$NON-NLS-1$
+ final String[] NEW_CONSTRAINTS = new String[] { CONSTRAINT1, CONSTRAINT2, CONSTRAINT3 };
+ this.propDefn.setValueConstraints(NEW_CONSTRAINTS);
+
+ final String[] constraints = this.propDefn.getValueConstraints();
+ assertEquals(NEW_CONSTRAINTS.length, constraints.length);
+
+ for (int i = 0; i < NEW_CONSTRAINTS.length; ++i) {
+ assertEquals(NEW_CONSTRAINTS[i], constraints[i]);
+ }
+ }
+
+ @Test
+ public void shouldSetValueContraintsWithEmptyArray() {
+ this.propDefn.setValueConstraints(new String[0]);
+ assertEquals(0, this.propDefn.getValueConstraints().length);
+ }
+
+ @Test
+ public void shouldSetValueContraintsWithNull() {
+ this.propDefn.setValueConstraints(null);
+ assertEquals(0, this.propDefn.getValueConstraints().length);
+ }
}
12 years, 3 months
JBoss Tools SVN: r39800 - trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util.
by jbosstools-commits@lists.jboss.org
Author: yradtsevich
Date: 2012-03-23 10:57:46 -0400 (Fri, 23 Mar 2012)
New Revision: 39800
Modified:
trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/BrowserSimLauncher.java
Log:
https://issues.jboss.org/browse/JBIDE-11179 : BrowserSim - add a view source option
- converted output streams to char format
Modified: trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/BrowserSimLauncher.java
===================================================================
--- trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/BrowserSimLauncher.java 2012-03-23 13:57:07 UTC (rev 39799)
+++ trunk/vpe/plugins/org.jboss.tools.vpe.browsersim.eclipse/src/org/jboss/tools/vpe/browsersim/eclipse/util/BrowserSimLauncher.java 2012-03-23 14:57:46 UTC (rev 39800)
@@ -10,9 +10,13 @@
******************************************************************************/
package org.jboss.tools.vpe.browsersim.eclipse.util;
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
@@ -57,14 +61,17 @@
Process browserSimProcess = processBuilder.start();
- final InputStream errorStream = browserSimProcess.getErrorStream();
- final InputStream inputStream = browserSimProcess.getInputStream();
+ final InputStreamReader errorReader = new InputStreamReader(browserSimProcess.getErrorStream());
+ final InputStreamReader inputReader = new InputStreamReader(browserSimProcess.getInputStream());
+
new Thread() {
public void run() {
- int nextByte;
+ int nextCharInt;
+ String nextLine;
try {
- while ((nextByte = inputStream.read()) >= 0) {
- System.out.write(nextByte);
+ while ((nextCharInt = inputReader.read()) >= 0) {
+ char nextChar = (char) nextCharInt;
+ System.out.print(nextChar);
}
} catch (IOException e) {
e.printStackTrace();
@@ -73,10 +80,10 @@
}.start();
new Thread() {
public void run() {
- int nextByte;
+ int nextCharInt;
try {
- while ((nextByte = errorStream.read()) >= 0) {
- System.err.write(nextByte);
+ while ((nextCharInt = errorReader.read()) >= 0) {
+ System.err.print((char) nextCharInt);
}
} catch (IOException e) {
e.printStackTrace();
12 years, 3 months