Skip to content

Commit

Permalink
Merge pull request #107 from elvisisking/TEIIDDES-1597
Browse files Browse the repository at this point in the history
TEIIDDES-1597 Remove the concept of extention properties for ViewImpl ob.jects for virtual models
  • Loading branch information
blafond committed Feb 18, 2013
2 parents b76d97a + f2c84a8 commit 3cf5a85
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ public abstract class AbstractMetaclassNameProvider implements ExtendableMetacla
private static final String RELATIONAL_COLUMN = "org.teiid.designer.metamodels.relational.impl.ColumnImpl"; //$NON-NLS-1$
private static final String RELATIONAL_PRIMARY_KEY = "org.teiid.designer.metamodels.relational.impl.PrimaryKeyImpl"; //$NON-NLS-1$
private static final String RELATIONAL_FOREIGN_KEY = "org.teiid.designer.metamodels.relational.impl.ForeignKeyImpl"; //$NON-NLS-1$
private static final String RELATIONAL_VIEW = "org.teiid.designer.metamodels.relational.impl.ViewImpl"; //$NON-NLS-1$
private static final String RELATIONAL_PROCEDURE = "org.teiid.designer.metamodels.relational.impl.ProcedureImpl"; //$NON-NLS-1$
private static final String RELATIONAL_INDEX = "org.teiid.designer.metamodels.relational.impl.IndexImpl"; //$NON-NLS-1$
private static final String RELATIONAL_PROCEDURE_PARAMETER = "org.teiid.designer.metamodels.relational.impl.ProcedureParameterImpl"; //$NON-NLS-1$
Expand Down Expand Up @@ -86,11 +85,6 @@ private void populateParentChildMap( String metamodelUri ) {
children.add(RELATIONAL_ACCESS_PATTERN);
children.add(RELATIONAL_UNIQUE_CONSTRAINT);
this.parentChildMap.put(RELATIONAL_BASE_TABLE, children);
// View
children = new ArrayList<String>();
children.add(RELATIONAL_COLUMN);
children.add(RELATIONAL_ACCESS_PATTERN);
this.parentChildMap.put(RELATIONAL_VIEW, children);
// Procedure
children = new ArrayList<String>();
children.add(RELATIONAL_PROCEDURE_RESULT);
Expand Down Expand Up @@ -150,11 +144,7 @@ private void populateParentChildMap( String metamodelUri ) {
public String[] getExtendableMetaclassRoots() {
String[] resultArray = new String[0];
if (RELATIONAL_URI.equals(this.metamodelUri)) {
resultArray = new String[4];
resultArray[0] = RELATIONAL_BASE_TABLE;
resultArray[1] = RELATIONAL_VIEW;
resultArray[2] = RELATIONAL_PROCEDURE;
resultArray[3] = RELATIONAL_INDEX;
resultArray = new String[] {RELATIONAL_BASE_TABLE, RELATIONAL_PROCEDURE, RELATIONAL_INDEX};
} else if (SOURCE_FUNCTION_URI.equals(this.metamodelUri)) {
resultArray = new String[1];
resultArray[0] = FUNCTION_SCALAR_FUNCTION;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,8 @@ public class Messages extends NLS {
public static String medNodeLabel;
public static String missingPropertyIdNodeLabel;

public static String metaclassNotFoundByProvider;

static {
NLS.initializeMessages("org.teiid.designer.extension.ui.messages", Messages.class); //$NON-NLS-1$
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
import org.teiid.designer.extension.definition.ExtendableMetaclassNameProvider;
import org.teiid.designer.extension.definition.ModelExtensionDefinition.PropertyName;
import org.teiid.designer.extension.definition.ModelExtensionDefinitionValidator;
import org.teiid.designer.extension.definition.ValidationStatus;
import org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition;
import org.teiid.designer.extension.ui.Activator;
import org.teiid.designer.extension.ui.Messages;
Expand Down Expand Up @@ -92,6 +93,9 @@ public class PropertiesEditorPage extends MedEditorPage {
private static final String MC_PREFIX = ".impl."; //$NON-NLS-1$
private static final String MC_SUFFIX = "Impl"; //$NON-NLS-1$

/**
* @param medEditor the MED editor this page belongs to (cannot be <code>null</code>)
*/
public PropertiesEditorPage( ModelExtensionDefinitionEditor medEditor ) {
super(medEditor, MED_PROPERTIES_PAGE, Messages.medEditorPropertiesPageTitle);

Expand All @@ -105,6 +109,29 @@ MedEditorPage accessPage() {
return this;
}

private boolean confirmMetaclass(final String metaclassBeingValidated,
final ExtendableMetaclassNameProvider provider,
final String validMetaclass) {
if (metaclassBeingValidated.equals(validMetaclass)) {
return true;
}

final String[] kids = provider.getExtendableMetaclassChildren(validMetaclass);
boolean confirmed = false;

if ((kids != null) && (kids.length != 0)) {
for (final String kid : kids) {
confirmed = confirmMetaclass(metaclassBeingValidated, provider, kid);

if (confirmed) {
break;
}
}
}

return confirmed;
}

/**
* {@inheritDoc}
*
Expand Down Expand Up @@ -864,8 +891,30 @@ private void updateState() {
}

private void validateMetaclasses() {
this.metaclassError.setStatus(ModelExtensionDefinitionValidator.validateMetaclassNames(getMed().getExtendedMetaclasses(),
true));
final String[] metaclasses = getMed().getExtendedMetaclasses();

// validate with MED validator
ValidationStatus status = ModelExtensionDefinitionValidator.validateMetaclassNames(metaclasses, true);

if (!status.isError()) {
// validate against metamodel
final ExtendableMetaclassNameProvider provider = ExtensionPlugin.getInstance().getMetaclassNameProvider(getMed().getMetamodelUri());

OUTER: for (final String metaclass : metaclasses) {
INNER: for (final String metaclassRoot : provider.getExtendableMetaclassRoots()) {
boolean confirmed = confirmMetaclass(metaclass, provider, metaclassRoot);

if (confirmed) {
break INNER;
} else {
status = ValidationStatus.createErrorMessage(NLS.bind(Messages.metaclassNotFoundByProvider, metaclass));
break OUTER;
}
}
}
}

this.metaclassError.setStatus(status);
updateMessage(this.metaclassError);
validatePropertyDefinitions(); // need to do this to catch when a new metaclass is added
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -358,3 +358,5 @@ metaclassNodeToolTip = {0}
propertyNodeToolTip = {0} : {1}
medNodeLabel = Model Extension Definition
missingPropertyIdNodeLabel = <no identifier>

metaclassNotFoundByProvider = "{0}" is not a valid model object metaclass

0 comments on commit 3cf5a85

Please sign in to comment.