diff options
author | jmisinco | 2013-02-05 15:26:27 +0000 |
---|---|---|
committer | jmisinco | 2013-02-06 19:54:41 +0000 |
commit | a5c3eb24e1d06175e24ba11a4fa9afcf4ac4a652 (patch) | |
tree | 586e5c4f1302977eedd854c0d1d2e967c5e80157 | |
parent | 00b56b857854f670b72036fa86e324fd62d13407 (diff) | |
download | org.eclipse.osee-a5c3eb24e1d06175e24ba11a4fa9afcf4ac4a652.tar.gz org.eclipse.osee-a5c3eb24e1d06175e24ba11a4fa9afcf4ac4a652.tar.xz org.eclipse.osee-a5c3eb24e1d06175e24ba11a4fa9afcf4ac4a652.zip |
bug[ats_3XZKD]: Validate RenderTemplates to prevent duplicates
Change-Id: I1d6f56794504d3d74f4b25640b58714ece91d10e
8 files changed, 216 insertions, 6 deletions
diff --git a/plugins/org.eclipse.osee.client.integration.tests/OseeClient_Integration_TestSuite.launch b/plugins/org.eclipse.osee.client.integration.tests/OseeClient_Integration_TestSuite.launch index 4920f368e4e..b4710a941e6 100644 --- a/plugins/org.eclipse.osee.client.integration.tests/OseeClient_Integration_TestSuite.launch +++ b/plugins/org.eclipse.osee.client.integration.tests/OseeClient_Integration_TestSuite.launch @@ -30,7 +30,6 @@ <booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/> <stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/> <stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/> -<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/OSEE_x86_64"/> <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.osee.client.integration.tests.OseeClientIntegrationTestSuite"/> <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -nosplash"/> <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.osee.client.integration.tests"/> diff --git a/plugins/org.eclipse.osee.client.integration.tests/src/org/eclipse/osee/client/integration/tests/integration/ui/skynet/TemplateArtifactValidatorTest.java b/plugins/org.eclipse.osee.client.integration.tests/src/org/eclipse/osee/client/integration/tests/integration/ui/skynet/TemplateArtifactValidatorTest.java new file mode 100644 index 00000000000..04326732216 --- /dev/null +++ b/plugins/org.eclipse.osee.client.integration.tests/src/org/eclipse/osee/client/integration/tests/integration/ui/skynet/TemplateArtifactValidatorTest.java @@ -0,0 +1,134 @@ +/******************************************************************************* + * Copyright (c) 2013 Boeing. + * 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: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.client.integration.tests.integration.ui.skynet; + +import static org.eclipse.osee.client.demo.DemoChoice.OSEE_CLIENT_DEMO; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.osee.client.test.framework.OseeClientIntegrationRule; +import org.eclipse.osee.client.test.framework.OseeLogMonitorRule; +import org.eclipse.osee.client.test.framework.TestInfo; +import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; +import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; +import org.eclipse.osee.framework.core.enums.CoreBranches; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.model.Branch; +import org.eclipse.osee.framework.core.model.type.AttributeType; +import org.eclipse.osee.framework.jdk.core.util.GUID; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.ArtifactTypeManager; +import org.eclipse.osee.framework.skynet.core.artifact.BranchManager; +import org.eclipse.osee.framework.skynet.core.attribute.AttributeTypeManager; +import org.eclipse.osee.framework.ui.skynet.templates.TemplateArtifactValidator; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +/** + * @author John Misinco + */ +public class TemplateArtifactValidatorTest { + + @Rule + public OseeClientIntegrationRule integration = new OseeClientIntegrationRule(OSEE_CLIENT_DEMO); + + @Rule + public OseeLogMonitorRule monitorRule = new OseeLogMonitorRule(); + + @Rule + public TestInfo testInfo = new TestInfo(); + + private Branch testBranch; + + @Before + public void setup() throws OseeCoreException { + testBranch = BranchManager.createWorkingBranch(CoreBranches.COMMON, testInfo.getQualifiedTestName()); + } + + @After + public void tearDown() { + BranchManager.deleteBranchAndPend(testBranch); + } + + @Test + public void testIsApplicable() throws OseeCoreException { + Artifact newTemplate = ArtifactTypeManager.addArtifact(CoreArtifactTypes.RendererTemplate, testBranch); + newTemplate.persist(testInfo.getQualifiedTestName()); + Artifact newNonTemplate = ArtifactTypeManager.addArtifact(CoreArtifactTypes.Design, testBranch); + newNonTemplate.persist(testInfo.getQualifiedTestName()); + + TemplateArtifactValidator validator = new TemplateArtifactValidator(); + for (AttributeType attrType : AttributeTypeManager.getAllTypes()) { + boolean correctAttrType = false; + if (attrType.equals(CoreAttributeTypes.TemplateMatchCriteria)) { + correctAttrType = true; + } + Assert.assertEquals(correctAttrType, validator.isApplicable(newTemplate, attrType)); + Assert.assertFalse(validator.isApplicable(newNonTemplate, attrType)); + } + } + + @Test + public void testValidateOkStatus() throws OseeCoreException { + Artifact newTemplate = ArtifactTypeManager.addArtifact(CoreArtifactTypes.RendererTemplate, testBranch); + newTemplate.persist(testInfo.getQualifiedTestName()); + TemplateArtifactValidator validator = new TemplateArtifactValidator(); + String templateId = GUID.create(); + IStatus status = validator.validate(newTemplate, CoreAttributeTypes.TemplateMatchCriteria, templateId); + Assert.assertTrue(status.isOK()); + newTemplate.addAttributeFromString(CoreAttributeTypes.TemplateMatchCriteria, templateId); + newTemplate.persist(testInfo.getQualifiedTestName()); + + newTemplate = ArtifactTypeManager.addArtifact(CoreArtifactTypes.RendererTemplate, testBranch); + newTemplate.persist(testInfo.getQualifiedTestName()); + templateId = GUID.create(); + status = validator.validate(newTemplate, CoreAttributeTypes.TemplateMatchCriteria, templateId); + Assert.assertTrue(status.isOK()); + newTemplate.persist(testInfo.getQualifiedTestName()); + } + + @Test + public void testDuplicateCriteriaOnSeparateBranches() throws OseeCoreException { + Artifact newTemplate = ArtifactTypeManager.addArtifact(CoreArtifactTypes.RendererTemplate, testBranch); + newTemplate.persist(testInfo.getQualifiedTestName()); + TemplateArtifactValidator validator = new TemplateArtifactValidator(); + String templateId = GUID.create(); + IStatus status = validator.validate(newTemplate, CoreAttributeTypes.TemplateMatchCriteria, templateId); + Assert.assertTrue(status.isOK()); + newTemplate.addAttributeFromString(CoreAttributeTypes.TemplateMatchCriteria, templateId); + newTemplate.persist(testInfo.getQualifiedTestName()); + + Branch testBranch2 = + BranchManager.createWorkingBranch(CoreBranches.COMMON, testInfo.getQualifiedTestName() + "2"); + Artifact newTemplate2 = ArtifactTypeManager.addArtifact(CoreArtifactTypes.RendererTemplate, testBranch2); + newTemplate2.persist(testInfo.getQualifiedTestName()); + status = validator.validate(newTemplate2, CoreAttributeTypes.TemplateMatchCriteria, templateId); + Assert.assertTrue(status.isOK()); + newTemplate2.addAttributeFromString(CoreAttributeTypes.TemplateMatchCriteria, templateId); + newTemplate2.persist(testInfo.getQualifiedTestName()); + BranchManager.deleteBranch(testBranch2); + } + + @Test + public void testValidateErrorStatus() throws OseeCoreException { + TemplateArtifactValidator validator = new TemplateArtifactValidator(); + String templateId = GUID.create(); + + Artifact newTemplate = ArtifactTypeManager.addArtifact(CoreArtifactTypes.RendererTemplate, testBranch); + newTemplate.addAttributeFromString(CoreAttributeTypes.TemplateMatchCriteria, templateId); + newTemplate.persist(testInfo.getQualifiedTestName()); + + // since newTemplate was already persisted with templateId, this check will produce and error status + IStatus status = validator.validate(newTemplate, CoreAttributeTypes.TemplateMatchCriteria, templateId); + Assert.assertFalse(status.isOK()); + } +} diff --git a/plugins/org.eclipse.osee.client.integration.tests/src/org/eclipse/osee/client/integration/tests/integration/ui/skynet/XUiSkynetCoreIntegrationTestSuite.java b/plugins/org.eclipse.osee.client.integration.tests/src/org/eclipse/osee/client/integration/tests/integration/ui/skynet/XUiSkynetCoreIntegrationTestSuite.java index 09462f5e935..c221d356c7d 100644 --- a/plugins/org.eclipse.osee.client.integration.tests/src/org/eclipse/osee/client/integration/tests/integration/ui/skynet/XUiSkynetCoreIntegrationTestSuite.java +++ b/plugins/org.eclipse.osee.client.integration.tests/src/org/eclipse/osee/client/integration/tests/integration/ui/skynet/XUiSkynetCoreIntegrationTestSuite.java @@ -26,6 +26,7 @@ import org.junit.runners.Suite; RelationIntegrityCheckTest.class, ReplaceWithBaselineTest.class, StringGuidsToArtifactListOperationTest.class, + TemplateArtifactValidatorTest.class, ViewWordChangeAndDiffTest.class, WordArtifactElementExtractorTest.class, WordEditTest.class, diff --git a/plugins/org.eclipse.osee.framework.skynet.core/support/OseeTypes_Framework.osee b/plugins/org.eclipse.osee.framework.skynet.core/support/OseeTypes_Framework.osee index d34fa39f476..f44bd7b6226 100644 --- a/plugins/org.eclipse.osee.framework.skynet.core/support/OseeTypes_Framework.osee +++ b/plugins/org.eclipse.osee.framework.skynet.core/support/OseeTypes_Framework.osee @@ -328,6 +328,7 @@ attributeType "Template Match Criteria" extends StringAttribute { dataProvider DefaultAttributeDataProvider min 0 max unlimited + taggerId DefaultAttributeTaggerProvider description "Criteria that determines what template is selected ie: \'Render Artifact PresentationType Option\'" } diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/plugin.xml b/plugins/org.eclipse.osee.framework.ui.skynet/plugin.xml index 1e099538b5f..719d0d36d70 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/plugin.xml +++ b/plugins/org.eclipse.osee.framework.ui.skynet/plugin.xml @@ -16,7 +16,6 @@ <extension-point id="DatabaseHealthOperation" name="DatabaseHealthOperation" schema="schema/DatabaseHealthOperation.exsd"/> <extension-point id="ArtifactImageProvider" name="ArtifactImageProvider" schema="schema/ArtifactImageProvider.exsd"/> <extension-point id="UserNavigateItem" name="UserNavigateItem" schema="schema/UserNavigateItem.exsd"/> - <extension point="org.eclipse.ui.popupMenus"> <objectContribution @@ -1580,7 +1579,6 @@ className="org.eclipse.osee.framework.ui.skynet.dbHealth.RepeatEnumerationAttributeValues"> </DatabaseHealthOperation> </extension> - <extension point="org.eclipse.osee.framework.ui.skynet.BlamOperation"> <Operation @@ -1756,4 +1754,10 @@ parentId="org.eclipse.ui.contexts.window"> </context> </extension> + <extension + point="org.eclipse.osee.framework.skynet.core.OseeValidator"> + <OseeValidator + classname="org.eclipse.osee.framework.ui.skynet.templates.TemplateArtifactValidator"> + </OseeValidator> + </extension> </plugin> diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/TemplateArtifactValidator.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/TemplateArtifactValidator.java new file mode 100644 index 00000000000..ffe722d15f8 --- /dev/null +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/templates/TemplateArtifactValidator.java @@ -0,0 +1,62 @@ +/******************************************************************************* + * Copyright (c) 2013 Boeing. + * 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: + * Boeing - initial API and implementation + *******************************************************************************/ +package org.eclipse.osee.framework.ui.skynet.templates; + +import java.util.Collection; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.osee.framework.core.data.IAttributeType; +import org.eclipse.osee.framework.core.enums.CoreArtifactTypes; +import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.skynet.core.artifact.Artifact; +import org.eclipse.osee.framework.skynet.core.artifact.search.ArtifactQuery; +import org.eclipse.osee.framework.skynet.core.validation.IOseeValidator; +import org.eclipse.osee.framework.ui.skynet.internal.Activator; + +/** + * @author John Misinco + */ +public class TemplateArtifactValidator implements IOseeValidator { + + @Override + public int getQualityOfService() { + return SHORT; + } + + @Override + public boolean isApplicable(Artifact artifact, IAttributeType attributeType) { + return artifact.isOfType(CoreArtifactTypes.RendererTemplate) && attributeType.equals(CoreAttributeTypes.TemplateMatchCriteria); + } + + @Override + public IStatus validate(Artifact artifact, IAttributeType attributeType, Object proposedObject) throws OseeCoreException { + if (proposedObject instanceof String) { + String toVerify = (String) proposedObject; + if (Strings.isValid(toVerify)) { + Collection<Artifact> templates = + ArtifactQuery.getArtifactListFromTypeAndAttribute(CoreArtifactTypes.RendererTemplate, + CoreAttributeTypes.TemplateMatchCriteria, toVerify, artifact.getBranch()); + + if (templates.isEmpty()) { + return Status.OK_STATUS; + } else { + String message = + String.format("Invalid %s - unique constraint violation - value has already been used.", + attributeType); + return new Status(IStatus.ERROR, Activator.PLUGIN_ID, message); + } + } + } + return Status.OK_STATUS; + } +} diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XStackedDam.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XStackedDam.java index e7abf479350..7faba53c36d 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XStackedDam.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XStackedDam.java @@ -36,6 +36,8 @@ import org.eclipse.osee.framework.skynet.core.attribute.BinaryBackedAttribute; import org.eclipse.osee.framework.skynet.core.attribute.DateAttribute; import org.eclipse.osee.framework.skynet.core.attribute.FloatingPointAttribute; import org.eclipse.osee.framework.skynet.core.attribute.IntegerAttribute; +import org.eclipse.osee.framework.skynet.core.validation.IOseeValidator; +import org.eclipse.osee.framework.skynet.core.validation.OseeValidator; import org.eclipse.osee.framework.ui.skynet.internal.Activator; import org.eclipse.osee.framework.ui.swt.Displays; import org.eclipse.swt.SWT; @@ -202,8 +204,13 @@ public class XStackedDam extends XStackedWidget<String> implements IAttributeWid if (status.isOK()) { for (XWidget widget : xWidgets.values()) { status = widget.isValid(); + if (status.isOK()) { + status = + OseeValidator.getInstance().validate(IOseeValidator.SHORT, getArtifact(), getAttributeType(), + widget.getData()); + } if (!status.isOK()) { - return status; + break; } } } @@ -278,6 +285,7 @@ public class XStackedDam extends XStackedWidget<String> implements IAttributeWid } return xWidget; } + private final class XTextInternalWidget extends XText { public XTextInternalWidget(String label) { diff --git a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XWidgetValidateUtility.java b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XWidgetValidateUtility.java index 01fdfd10590..fcf1a5ea996 100644 --- a/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XWidgetValidateUtility.java +++ b/plugins/org.eclipse.osee.framework.ui.skynet/src/org/eclipse/osee/framework/ui/skynet/widgets/XWidgetValidateUtility.java @@ -12,6 +12,7 @@ package org.eclipse.osee.framework.ui.skynet.widgets; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.IMessageProvider; +import org.eclipse.osee.framework.core.data.IAttributeType; import org.eclipse.osee.framework.skynet.core.artifact.Artifact; import org.eclipse.osee.framework.skynet.core.validation.OseeValidator; @@ -24,9 +25,9 @@ public final class XWidgetValidateUtility { // Utility class } - public static void validate(int requiredQualityOfService, XWidget xWidget, Artifact artifact, String attributeTypeName, Object proposedValue) { + public static void validate(int requiredQualityOfService, XWidget xWidget, Artifact artifact, IAttributeType attributeType, Object proposedValue) { IStatus status = - OseeValidator.getInstance().validate(requiredQualityOfService, artifact, attributeTypeName, proposedValue); + OseeValidator.getInstance().validate(requiredQualityOfService, artifact, attributeType, proposedValue); setStatus(status, xWidget); } |