diff options
author | jmisinco | 2011-10-25 19:41:48 +0000 |
---|---|---|
committer | Roberto E. Escobar | 2011-10-25 19:41:48 +0000 |
commit | b6703308972661be790b5e8d574aca1214e05368 (patch) | |
tree | 40a9e7afd40eed06c2b688c90bb1daa44d8d86d1 /plugins | |
parent | 1cf87e13eff5fe9a7b9c9dcc69d403b511adab99 (diff) | |
download | org.eclipse.osee-b6703308972661be790b5e8d574aca1214e05368.tar.gz org.eclipse.osee-b6703308972661be790b5e8d574aca1214e05368.tar.xz org.eclipse.osee-b6703308972661be790b5e8d574aca1214e05368.zip |
feature[ats_18K4T]: Integration of ORCS and UI
Diffstat (limited to 'plugins')
25 files changed, 453 insertions, 190 deletions
diff --git a/plugins/org.eclipse.osee.ats.presenter.test/src/org/eclipse/osee/ats/presenter/internal/AtsSearchPresenterTest.java b/plugins/org.eclipse.osee.ats.presenter.test/src/org/eclipse/osee/ats/presenter/internal/AtsSearchPresenterTest.java index 6f07d70cc7f..fe50911914e 100644 --- a/plugins/org.eclipse.osee.ats.presenter.test/src/org/eclipse/osee/ats/presenter/internal/AtsSearchPresenterTest.java +++ b/plugins/org.eclipse.osee.ats.presenter.test/src/org/eclipse/osee/ats/presenter/internal/AtsSearchPresenterTest.java @@ -20,6 +20,8 @@ import org.eclipse.osee.ats.mocks.MockAtsArtifactProvider; import org.eclipse.osee.ats.mocks.MockAtsSearchHeaderComponent; import org.eclipse.osee.display.api.data.ViewId; import org.eclipse.osee.display.presenter.Utility; +import org.eclipse.osee.display.presenter.mocks.MockDisplayOptionsComponent; +import org.eclipse.osee.display.presenter.mocks.MockLogger; import org.eclipse.osee.display.presenter.mocks.MockSearchNavigator; import org.eclipse.osee.display.presenter.mocks.MockSearchResultsListComponent; import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; @@ -30,7 +32,6 @@ import org.eclipse.osee.orcs.mock.MockArtifact; import org.eclipse.osee.orcs.mock.MockAttribute; import org.eclipse.osee.orcs.mock.MockMatch; import org.eclipse.osee.orcs.search.Match; -import org.junit.Ignore; import org.junit.Test; /** @@ -42,7 +43,7 @@ public class AtsSearchPresenterTest { public void testSelectProgram() { MockAtsArtifactProvider provider = new MockAtsArtifactProvider(); AtsSearchPresenterImpl<AtsSearchHeaderComponent, AtsSearchParameters> presenter = - new AtsSearchPresenterImpl<AtsSearchHeaderComponent, AtsSearchParameters>(provider); + new AtsSearchPresenterImpl<AtsSearchHeaderComponent, AtsSearchParameters>(provider, new MockLogger()); MockAtsSearchHeaderComponent comp = new MockAtsSearchHeaderComponent(); ViewId program = new ViewId("prg1Guid_18H74Zqo3gA", "program1"); presenter.selectProgram(program, comp); @@ -50,10 +51,9 @@ public class AtsSearchPresenterTest { } @Test - @Ignore public void testSelectSearch() throws UnsupportedEncodingException { AtsSearchPresenterImpl<AtsSearchHeaderComponent, AtsSearchParameters> presenter = - new AtsSearchPresenterImpl<AtsSearchHeaderComponent, AtsSearchParameters>(null); + new AtsSearchPresenterImpl<AtsSearchHeaderComponent, AtsSearchParameters>(null, new MockLogger()); MockSearchNavigator navigator = new MockSearchNavigator(); String programGuid = "prg1Guid_18H74Zqo3gA"; String buildGuid = "buildGuid1_d74Zqo3gA"; @@ -63,13 +63,14 @@ public class AtsSearchPresenterTest { presenter.selectSearch("", params, navigator); String url = navigator.getResultsUrl(); String expected = - "/search=phrase&verbose=false&program=" + Utility.encode(programGuid) + "&nameOnly=true&build=" + Utility.encode(buildGuid); + "/search=phrase&program=" + Utility.encode(programGuid) + "&nameOnly=true&build=" + Utility.encode(buildGuid); Assert.assertEquals(expected, url); } @Test public void testInitSearchResults() throws UnsupportedEncodingException { MockAtsArtifactProvider provider = new MockAtsArtifactProvider(); + MockDisplayOptionsComponent optionsComp = new MockDisplayOptionsComponent(); List<Match<ReadableArtifact, ReadableAttribute<?>>> resultList = new ArrayList<Match<ReadableArtifact, ReadableAttribute<?>>>(); MockArtifact art = new MockArtifact("guid1", "matchArt"); @@ -78,7 +79,7 @@ public class AtsSearchPresenterTest { resultList.add(match); provider.setResultList(resultList); AtsSearchPresenterImpl<AtsSearchHeaderComponent, AtsSearchParameters> presenter = - new AtsSearchPresenterImpl<AtsSearchHeaderComponent, AtsSearchParameters>(provider); + new AtsSearchPresenterImpl<AtsSearchHeaderComponent, AtsSearchParameters>(provider, new MockLogger()); MockAtsSearchHeaderComponent headerComp = new MockAtsSearchHeaderComponent(); MockSearchResultsListComponent resultsComponent = new MockSearchResultsListComponent(); presenter.initSearchResults(null, headerComp, resultsComponent, null); @@ -88,7 +89,7 @@ public class AtsSearchPresenterTest { String buildGuid = GUID.create(); String url = "/program=" + Utility.encode(programGuid) + "&build=" + Utility.encode(buildGuid) + "&nameOnly=true&search=phrase&verbose=false"; - presenter.initSearchResults(url, headerComp, resultsComponent, null); + presenter.initSearchResults(url, headerComp, resultsComponent, optionsComp); Assert.assertEquals(1, resultsComponent.getSearchResults().size()); } } diff --git a/plugins/org.eclipse.osee.ats.presenter/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.ats.presenter/META-INF/MANIFEST.MF index aa0a594a94b..2745d40ca0d 100644 --- a/plugins/org.eclipse.osee.ats.presenter/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.ats.presenter/META-INF/MANIFEST.MF @@ -20,6 +20,7 @@ Import-Package: org.eclipse.core.runtime;version="3.4.0", org.eclipse.osee.framework.core.exception, org.eclipse.osee.framework.core.model.type, org.eclipse.osee.framework.jdk.core.util, + org.eclipse.osee.logger, org.eclipse.osee.orcs, org.eclipse.osee.orcs.data, org.eclipse.osee.orcs.search diff --git a/plugins/org.eclipse.osee.ats.presenter/OSGI-INF/ats.presenter.factory.xml b/plugins/org.eclipse.osee.ats.presenter/OSGI-INF/ats.presenter.factory.xml index fb4759cf2b4..3e39da2c88d 100644 --- a/plugins/org.eclipse.osee.ats.presenter/OSGI-INF/ats.presenter.factory.xml +++ b/plugins/org.eclipse.osee.ats.presenter/OSGI-INF/ats.presenter.factory.xml @@ -5,4 +5,5 @@ <provide interface="org.eclipse.osee.ats.api.search.AtsPresenterFactory"/> </service> <reference bind="setOrcsApi" cardinality="1..1" interface="org.eclipse.osee.orcs.OrcsApi" name="OrcsApi" policy="static"/> + <reference bind="setLogger" cardinality="1..1" interface="org.eclipse.osee.logger.Log" name="Log" policy="static"/> </scr:component> diff --git a/plugins/org.eclipse.osee.ats.presenter/src/org/eclipse/osee/ats/presenter/internal/AtsPresenterFactoryImpl.java b/plugins/org.eclipse.osee.ats.presenter/src/org/eclipse/osee/ats/presenter/internal/AtsPresenterFactoryImpl.java index bf7b3e176ce..b7c018f1019 100644 --- a/plugins/org.eclipse.osee.ats.presenter/src/org/eclipse/osee/ats/presenter/internal/AtsPresenterFactoryImpl.java +++ b/plugins/org.eclipse.osee.ats.presenter/src/org/eclipse/osee/ats/presenter/internal/AtsPresenterFactoryImpl.java @@ -15,6 +15,7 @@ import org.eclipse.osee.ats.api.data.AtsSearchParameters; import org.eclipse.osee.ats.api.search.AtsArtifactProvider; import org.eclipse.osee.ats.api.search.AtsPresenterFactory; import org.eclipse.osee.ats.api.search.AtsSearchPresenter; +import org.eclipse.osee.logger.Log; import org.eclipse.osee.orcs.OrcsApi; /** @@ -23,16 +24,21 @@ import org.eclipse.osee.orcs.OrcsApi; public class AtsPresenterFactoryImpl<T extends AtsSearchHeaderComponent, K extends AtsSearchParameters> implements AtsPresenterFactory<AtsSearchHeaderComponent, AtsSearchParameters> { private OrcsApi orcsApi; + private Log logger; public void setOrcsApi(OrcsApi orcsApi) { this.orcsApi = orcsApi; } + public void setLogger(Log logger) { + this.logger = logger; + } + @Override public AtsSearchPresenter<AtsSearchHeaderComponent, AtsSearchParameters> createInstance() { AtsArtifactProvider provider = new AtsArtifactProviderImpl(orcsApi, null); AtsSearchPresenterImpl<AtsSearchHeaderComponent, AtsSearchParameters> instance = - new AtsSearchPresenterImpl<AtsSearchHeaderComponent, AtsSearchParameters>(provider); + new AtsSearchPresenterImpl<AtsSearchHeaderComponent, AtsSearchParameters>(provider, logger); return instance; } diff --git a/plugins/org.eclipse.osee.ats.presenter/src/org/eclipse/osee/ats/presenter/internal/AtsSearchPresenterImpl.java b/plugins/org.eclipse.osee.ats.presenter/src/org/eclipse/osee/ats/presenter/internal/AtsSearchPresenterImpl.java index 1e4b0b67de7..0bdf31ee4a8 100644 --- a/plugins/org.eclipse.osee.ats.presenter/src/org/eclipse/osee/ats/presenter/internal/AtsSearchPresenterImpl.java +++ b/plugins/org.eclipse.osee.ats.presenter/src/org/eclipse/osee/ats/presenter/internal/AtsSearchPresenterImpl.java @@ -29,7 +29,9 @@ import org.eclipse.osee.display.api.search.SearchNavigator; import org.eclipse.osee.display.presenter.SearchPresenterImpl; import org.eclipse.osee.display.presenter.Utility; import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Lib; import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.logger.Log; import org.eclipse.osee.orcs.data.ReadableArtifact; /** @@ -39,8 +41,8 @@ public class AtsSearchPresenterImpl<T extends AtsSearchHeaderComponent, K extend private final AtsArtifactProvider atsArtifactProvider; - public AtsSearchPresenterImpl(AtsArtifactProvider artifactProvider) { - super(artifactProvider); + public AtsSearchPresenterImpl(AtsArtifactProvider artifactProvider, Log logger) { + super(artifactProvider, logger); atsArtifactProvider = artifactProvider; } @@ -56,7 +58,8 @@ public class AtsSearchPresenterImpl<T extends AtsSearchHeaderComponent, K extend try { programs = getPrograms(); } catch (Exception ex) { - setErrorMessage(headerComponent, ex.getMessage()); + logger.error(ex, "Error in addProgramsToSearchHeader"); + setErrorMessage(headerComponent, Lib.exceptionToString(ex)); return; } for (ViewId program : programs) { @@ -83,8 +86,8 @@ public class AtsSearchPresenterImpl<T extends AtsSearchHeaderComponent, K extend try { branchGuid = atsArtifactProvider.getBaselineBranchGuid(params.getBuild().getGuid()); } catch (Exception ex) { - setErrorMessage(searchHeaderComponent, - String.format("Cannot resolve branch id from build id: [%s]", params.getBuild().getGuid())); + logger.error(ex, "Error in initSearchResults"); + setErrorMessage(searchHeaderComponent, Lib.exceptionToString(ex)); return; } @@ -97,14 +100,17 @@ public class AtsSearchPresenterImpl<T extends AtsSearchHeaderComponent, K extend public void selectProgram(ViewId program, T headerComponent) { headerComponent.clearBuilds(); Collection<ViewId> builds = null; - try { - builds = getBuilds(program); - } catch (Exception ex) { - setErrorMessage(headerComponent, ex.getMessage()); - return; - } - for (ViewId build : builds) { - headerComponent.addBuild(build); + if (program != null) { + try { + builds = getBuilds(program); + } catch (Exception ex) { + logger.error(ex, "Error in selectProgram"); + setErrorMessage(headerComponent, Lib.exceptionToString(ex)); + return; + } + for (ViewId build : builds) { + headerComponent.addBuild(build); + } } } @@ -142,6 +148,7 @@ public class AtsSearchPresenterImpl<T extends AtsSearchHeaderComponent, K extend try { return "/" + getParametersAsEncodedUrl(params); } catch (UnsupportedEncodingException ex) { + logger.error(ex, "Error in encode"); return ""; } } @@ -149,12 +156,22 @@ public class AtsSearchPresenterImpl<T extends AtsSearchHeaderComponent, K extend protected AtsSearchParameters decodeIt(String url) { Map<String, String> data = Utility.decode(url); - ViewId program = new ViewId(data.get("program"), ""); - ViewId build = new ViewId(data.get("build"), ""); + ViewId program = null, build = null; + + if (data.containsKey("program")) { + program = new ViewId(data.get("program"), ""); + } + + if (data.containsKey("build")) { + build = new ViewId(data.get("build"), ""); + } String nValue = data.get("nameOnly"); boolean nameOnly = nValue == null ? false : nValue.equalsIgnoreCase("true"); - String searchPhrase = data.get("search"); + String searchPhrase = ""; + if (data.containsKey("search")) { + searchPhrase = data.get("search"); + } // String vValue = data.get("verbose"); // boolean verbose = vValue == null ? false : vValue.equalsIgnoreCase("true"); diff --git a/plugins/org.eclipse.osee.ats.view.web/src/org/eclipse/osee/ats/view/web/components/AtsSearchHeaderImpl.java b/plugins/org.eclipse.osee.ats.view.web/src/org/eclipse/osee/ats/view/web/components/AtsSearchHeaderImpl.java index 8b003772fd4..30ac69e0b52 100644 --- a/plugins/org.eclipse.osee.ats.view.web/src/org/eclipse/osee/ats/view/web/components/AtsSearchHeaderImpl.java +++ b/plugins/org.eclipse.osee.ats.view.web/src/org/eclipse/osee/ats/view/web/components/AtsSearchHeaderImpl.java @@ -273,6 +273,7 @@ public class AtsSearchHeaderImpl extends OseeSearchHeaderComponent implements At @Override public void setErrorMessage(String message) { + System.out.println(message); Application app = this.getApplication(); if (app != null) { Window mainWindow = app.getMainWindow(); diff --git a/plugins/org.eclipse.osee.ats.view.web/src/org/eclipse/osee/ats/view/web/search/AtsSearchResultsView.java b/plugins/org.eclipse.osee.ats.view.web/src/org/eclipse/osee/ats/view/web/search/AtsSearchResultsView.java index c7c6b0af852..9a70f970fae 100644 --- a/plugins/org.eclipse.osee.ats.view.web/src/org/eclipse/osee/ats/view/web/search/AtsSearchResultsView.java +++ b/plugins/org.eclipse.osee.ats.view.web/src/org/eclipse/osee/ats/view/web/search/AtsSearchResultsView.java @@ -35,6 +35,7 @@ public class AtsSearchResultsView extends OseeSearchResultsView { @Override protected void callInit(String url) { - searchPresenter.initSearchResults(url, searchHeader, searchResultsListComponent, null); + searchPresenter.initSearchResults(url, searchHeader, searchResultsListComponent, + searchResultsListComponent.getDisplayOptionsComponent()); } } diff --git a/plugins/org.eclipse.osee.display.presenter.mocks/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.display.presenter.mocks/META-INF/MANIFEST.MF index e9230bcb03c..87aa9473625 100644 --- a/plugins/org.eclipse.osee.display.presenter.mocks/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.display.presenter.mocks/META-INF/MANIFEST.MF @@ -14,6 +14,7 @@ Import-Package: org.eclipse.core.runtime;version="3.4.0", org.eclipse.osee.framework.core.exception, org.eclipse.osee.framework.core.model.type, org.eclipse.osee.framework.jdk.core.type, + org.eclipse.osee.logger, org.eclipse.osee.orcs.data, org.eclipse.osee.orcs.mock, org.eclipse.osee.orcs.search diff --git a/plugins/org.eclipse.osee.display.presenter.mocks/src/org/eclipse/osee/display/presenter/mocks/MockDisplayOptionsComponent.java b/plugins/org.eclipse.osee.display.presenter.mocks/src/org/eclipse/osee/display/presenter/mocks/MockDisplayOptionsComponent.java new file mode 100644 index 00000000000..14d0ac09e1a --- /dev/null +++ b/plugins/org.eclipse.osee.display.presenter.mocks/src/org/eclipse/osee/display/presenter/mocks/MockDisplayOptionsComponent.java @@ -0,0 +1,29 @@ +/******************************************************************************* + * Copyright (c) 2011 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.display.presenter.mocks; + +import org.eclipse.osee.display.api.components.DisplayOptionsComponent; +import org.eclipse.osee.display.api.data.DisplayOptions; + +/** + * @author John Misinco + */ +public class MockDisplayOptionsComponent implements DisplayOptionsComponent { + + @Override + public void clearAll() { + } + + @Override + public void setDisplayOptions(DisplayOptions options) { + } + +}
\ No newline at end of file diff --git a/plugins/org.eclipse.osee.display.presenter.mocks/src/org/eclipse/osee/display/presenter/mocks/MockLogger.java b/plugins/org.eclipse.osee.display.presenter.mocks/src/org/eclipse/osee/display/presenter/mocks/MockLogger.java new file mode 100644 index 00000000000..c8d3c661579 --- /dev/null +++ b/plugins/org.eclipse.osee.display.presenter.mocks/src/org/eclipse/osee/display/presenter/mocks/MockLogger.java @@ -0,0 +1,85 @@ +/******************************************************************************* + * Copyright (c) 2011 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.display.presenter.mocks; + +import org.eclipse.osee.logger.Log; + +/** + * @author John Misinco + */ +public class MockLogger implements Log { + + @Override + public boolean isTraceEnabled() { + return false; + } + + @Override + public void trace(String format, Object... args) { + } + + @Override + public void trace(Throwable th, String format, Object... args) { + } + + @Override + public boolean isDebugEnabled() { + return false; + } + + @Override + public void debug(String format, Object... args) { + } + + @Override + public void debug(Throwable th, String format, Object... args) { + } + + @Override + public boolean isInfoEnabled() { + return false; + } + + @Override + public void info(String format, Object... args) { + } + + @Override + public void info(Throwable th, String format, Object... args) { + } + + @Override + public boolean isWarnEnabled() { + return false; + } + + @Override + public void warn(String format, Object... args) { + } + + @Override + public void warn(Throwable th, String format, Object... args) { + } + + @Override + public boolean isErrorEnabled() { + return false; + } + + @Override + public void error(String format, Object... args) { + } + + @Override + public void error(Throwable th, String format, Object... args) { + } + +} diff --git a/plugins/org.eclipse.osee.display.presenter.test/src/org/eclipse/osee/display/presenter/internal/SearchPresenterTest.java b/plugins/org.eclipse.osee.display.presenter.test/src/org/eclipse/osee/display/presenter/internal/SearchPresenterTest.java index 34c75c0f313..1ca3d25efd9 100644 --- a/plugins/org.eclipse.osee.display.presenter.test/src/org/eclipse/osee/display/presenter/internal/SearchPresenterTest.java +++ b/plugins/org.eclipse.osee.display.presenter.test/src/org/eclipse/osee/display/presenter/internal/SearchPresenterTest.java @@ -25,6 +25,8 @@ import org.eclipse.osee.display.presenter.Utility; import org.eclipse.osee.display.presenter.mocks.MockArtifactHeaderComponent; import org.eclipse.osee.display.presenter.mocks.MockArtifactProvider; import org.eclipse.osee.display.presenter.mocks.MockAttributeComponent; +import org.eclipse.osee.display.presenter.mocks.MockDisplayOptionsComponent; +import org.eclipse.osee.display.presenter.mocks.MockLogger; import org.eclipse.osee.display.presenter.mocks.MockRelationComponent; import org.eclipse.osee.display.presenter.mocks.MockSearchHeaderComponent; import org.eclipse.osee.display.presenter.mocks.MockSearchNavigator; @@ -46,7 +48,6 @@ import org.eclipse.osee.orcs.mock.MockArtifact; import org.eclipse.osee.orcs.mock.MockAttribute; import org.eclipse.osee.orcs.mock.MockMatch; import org.eclipse.osee.orcs.search.Match; -import org.junit.Ignore; import org.junit.Test; /** @@ -68,14 +69,15 @@ public class SearchPresenterTest { @Test public void testInitSearchResults() throws UnsupportedEncodingException { MockArtifactProvider provider = new MockArtifactProvider(); + MockDisplayOptionsComponent optionsComp = new MockDisplayOptionsComponent(); provider.setResultList(getSearchResults()); SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters> presenter = - new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(provider); + new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(provider, new MockLogger()); MockSearchHeaderComponent searchHeaderComp = new MockSearchHeaderComponent(); MockSearchResultsListComponent searchResultsComp = new MockSearchResultsListComponent(); String url = "/branch=" + Utility.encode(GUID.create()) + "&nameOnly=true&search=" + Utility.encode("this is a test"); - presenter.initSearchResults(url, searchHeaderComp, searchResultsComp, null); + presenter.initSearchResults(url, searchHeaderComp, searchResultsComp, optionsComp); List<MockSearchResultComponent> searchResults = searchResultsComp.getSearchResults(); Assert.assertEquals(1, searchResults.size()); } @@ -83,19 +85,20 @@ public class SearchPresenterTest { @Test public void testInitSearchResultsErrors() throws UnsupportedEncodingException { SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters> presenter = - new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(null); + new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(null, new MockLogger()); MockSearchHeaderComponent searchHeaderComp = new MockSearchHeaderComponent(); + MockDisplayOptionsComponent optionsComp = new MockDisplayOptionsComponent(); MockSearchResultsListComponent searchResultsComp = new MockSearchResultsListComponent(); String url = "badUrl"; presenter.initSearchResults(url, searchHeaderComp, searchResultsComp, null); Assert.assertNotNull(searchResultsComp.getErrorMessage()); ExceptionArtifactProvider provider = new ExceptionArtifactProvider(); - presenter = new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(provider); + presenter = new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(provider, new MockLogger()); searchHeaderComp = new MockSearchHeaderComponent(); searchResultsComp = new MockSearchResultsListComponent(); url = "/branch=" + Utility.encode(GUID.create()) + "&nameOnly=true&search=" + Utility.encode("this is a test"); - presenter.initSearchResults(url, searchHeaderComp, searchResultsComp, null); + presenter.initSearchResults(url, searchHeaderComp, searchResultsComp, optionsComp); Assert.assertNotNull(searchResultsComp.getErrorMessage()); } @@ -103,7 +106,7 @@ public class SearchPresenterTest { public void testSelectArtifact() throws UnsupportedEncodingException { MockSearchNavigator navigator = new MockSearchNavigator(); SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters> presenter = - new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(null); + new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(null, new MockLogger()); String branchGuid = GUID.create(); String artGuid = GUID.create(); ViewArtifact artifact = new ViewArtifact(artGuid, "name", "type", null, new ViewId(branchGuid, "branchName")); @@ -113,12 +116,12 @@ public class SearchPresenterTest { } @Test - @Ignore public void testInitArtifactPage() throws UnsupportedEncodingException { MockArtifactProvider provider = new MockArtifactProvider(); + MockDisplayOptionsComponent optionsComp = new MockDisplayOptionsComponent(); provider.setResultList(getSearchResults()); SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters> presenter = - new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(provider); + new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(provider, new MockLogger()); String artGuid = GUID.create(); MockArtifact testArt = new MockArtifact(artGuid, "name"); MockArtifact parentArt = new MockArtifact(GUID.create(), "parent"); @@ -141,8 +144,8 @@ public class SearchPresenterTest { Assert.assertEquals(1, attrComp.getAttributes().keySet().size()); provider = new MockArtifactProvider(); - presenter = new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(provider); - presenter.initArtifactPage(url, searchHeaderComp, artHeaderComp, relComp, attrComp, null); + presenter = new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(provider, new MockLogger()); + presenter.initArtifactPage(url, searchHeaderComp, artHeaderComp, relComp, attrComp, optionsComp); Assert.assertNotNull(artHeaderComp.getErrorMessage()); } @@ -150,7 +153,7 @@ public class SearchPresenterTest { public void testInitArtifactPageErrors() throws UnsupportedEncodingException { String url = "badUrl"; SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters> presenter = - new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(null); + new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(null, new MockLogger()); MockSearchHeaderComponent searchHeaderComp = new MockSearchHeaderComponent(); MockArtifactHeaderComponent artHeaderComp = new MockArtifactHeaderComponent(); MockRelationComponent relComp = new MockRelationComponent(); @@ -160,7 +163,7 @@ public class SearchPresenterTest { url = "/branch=" + Utility.encode(GUID.create()) + "&artifact=" + Utility.encode(GUID.create()); ExceptionArtifactProvider provider = new ExceptionArtifactProvider(); - presenter = new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(provider); + presenter = new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(provider, new MockLogger()); searchHeaderComp = new MockSearchHeaderComponent(); artHeaderComp = new MockArtifactHeaderComponent(); relComp = new MockRelationComponent(); @@ -176,7 +179,7 @@ public class SearchPresenterTest { provider.setResultList(getSearchResults()); SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters> presenter = - new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(provider); + new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(provider, new MockLogger()); String artGuid = GUID.create(); String artGuidA = GUID.create(); String artGuidB = GUID.create(); @@ -222,7 +225,7 @@ public class SearchPresenterTest { @Test public void testSelectRelationTypeErrors() { SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters> presenter = - new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(null); + new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(null, new MockLogger()); MockRelationComponent relComp = new MockRelationComponent(); ViewId relation = new ViewId("0", "Name"); presenter.selectRelationType(null, relation, relComp); @@ -236,7 +239,7 @@ public class SearchPresenterTest { ExceptionArtifactProvider provider = new ExceptionArtifactProvider(); relComp = new MockRelationComponent(); - presenter = new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(provider); + presenter = new SearchPresenterImpl<SearchHeaderComponent, ViewSearchParameters>(provider, new MockLogger()); presenter.selectRelationType(artifact, relation, relComp); Assert.assertNotNull(relComp.getErrorMessage()); } diff --git a/plugins/org.eclipse.osee.display.presenter/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.display.presenter/META-INF/MANIFEST.MF index 5f4c19db7fc..e8cca7f05a8 100644 --- a/plugins/org.eclipse.osee.display.presenter/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.display.presenter/META-INF/MANIFEST.MF @@ -5,7 +5,8 @@ Bundle-SymbolicName: org.eclipse.osee.display.presenter Bundle-Version: 0.9.9.qualifier Bundle-Vendor: Eclipse Open System Engineering Environment Bundle-RequiredExecutionEnvironment: JavaSE-1.6 -Import-Package: org.eclipse.core.runtime, +Import-Package: com.google.common.collect, + org.eclipse.core.runtime, org.eclipse.osee.display.api.components, org.eclipse.osee.display.api.data, org.eclipse.osee.display.api.search, @@ -16,6 +17,7 @@ Import-Package: org.eclipse.core.runtime, org.eclipse.osee.framework.core.model.type, org.eclipse.osee.framework.jdk.core.type, org.eclipse.osee.framework.jdk.core.util, + org.eclipse.osee.logger, org.eclipse.osee.orcs, org.eclipse.osee.orcs.data, org.eclipse.osee.orcs.search diff --git a/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/ArtifactProviderImpl.java b/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/ArtifactProviderImpl.java index d585240b3c7..b185ea4500c 100644 --- a/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/ArtifactProviderImpl.java +++ b/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/ArtifactProviderImpl.java @@ -10,17 +10,13 @@ *******************************************************************************/ package org.eclipse.osee.display.presenter; -import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedList; import java.util.List; import java.util.Set; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.TimeUnit; import org.eclipse.osee.display.api.search.ArtifactProvider; import org.eclipse.osee.framework.core.data.IArtifactToken; import org.eclipse.osee.framework.core.data.IAttributeType; @@ -40,6 +36,7 @@ import org.eclipse.osee.orcs.search.Match; import org.eclipse.osee.orcs.search.QueryBuilder; import org.eclipse.osee.orcs.search.QueryFactory; import org.eclipse.osee.orcs.search.StringOperator; +import com.google.common.collect.MapMaker; /** * @author John Misinco @@ -47,25 +44,17 @@ import org.eclipse.osee.orcs.search.StringOperator; public class ArtifactProviderImpl implements ArtifactProvider { private final OrcsApi oseeApi; - private final ApplicationContext context; - private final Graph graph; - - protected static final List<String> notAllowed = new ArrayList<String>(); - static { - notAllowed.add("Technical Approaches"); - notAllowed.add("Technical Performance Parameters"); - notAllowed.add("Recent Imports"); - notAllowed.add("Test"); - notAllowed.add("Interface Requirements"); - notAllowed.add("Test Procedures"); - } + private final ConcurrentMap<ReadableArtifact, ReadableArtifact> parentCache; + private final ArtifactSanitizer sanitizer; public ArtifactProviderImpl(OrcsApi oseeApi, ApplicationContext context) { this.oseeApi = oseeApi; this.context = context; this.graph = oseeApi.getGraph(context); + this.parentCache = new MapMaker().initialCapacity(500).expiration(30, TimeUnit.MINUTES).makeMap(); + sanitizer = new ArtifactSanitizer(this); } protected QueryFactory getFactory() { @@ -74,17 +63,18 @@ public class ArtifactProviderImpl implements ArtifactProvider { @Override public ReadableArtifact getArtifactByArtifactToken(IOseeBranch branch, IArtifactToken token) throws OseeCoreException { - return sanitizeResult(getArtifactByGuid(branch, token.getGuid())); + return getArtifactByGuid(branch, token.getGuid()); } @Override public ReadableArtifact getArtifactByGuid(IOseeBranch branch, String guid) throws OseeCoreException { - return sanitizeResult(getFactory().fromBranch(branch).andGuidsOrHrids(guid).getResults().getOneOrNull()); + return sanitizer.sanitizeArtifact(getFactory().fromBranch(branch).andGuidsOrHrids(guid).getResults().getOneOrNull()); } @Override public List<Match<ReadableArtifact, ReadableAttribute<?>>> getSearchResults(IOseeBranch branch, boolean nameOnly, String searchPhrase) throws OseeCoreException { List<Match<ReadableArtifact, ReadableAttribute<?>>> filtered; + System.out.println("begin getSearchResults: " + new Date().toString()); IAttributeType type = nameOnly ? CoreAttributeTypes.Name : QueryBuilder.ANY_ATTRIBUTE_TYPE; @@ -92,74 +82,35 @@ public class ArtifactProviderImpl implements ArtifactProvider { builder.and(type, StringOperator.TOKENIZED_ANY_ORDER, CaseType.IGNORE_CASE, searchPhrase); List<Match<ReadableArtifact, ReadableAttribute<?>>> results = builder.getMatches().getList(); - filtered = sanitizeSearchResults(results); + System.out.println("end1 getSearchResults: " + new Date().toString()); + filtered = sanitizer.sanitizeSearchResults(results); + System.out.println("end2 getSearchResults: " + new Date().toString()); return filtered; } - private List<Match<ReadableArtifact, ReadableAttribute<?>>> sanitizeSearchResults(List<Match<ReadableArtifact, ReadableAttribute<?>>> toSanitize) { - int numProcessors = Runtime.getRuntime().availableProcessors(); - int partitionSize = toSanitize.size() / numProcessors; - int remainder = toSanitize.size() % numProcessors; - ExecutorService executor = Executors.newFixedThreadPool(numProcessors); - int startIndex = 0; - int endIndex = 0; - List<ResultsCallable> workers = new LinkedList<ResultsCallable>(); - List<Match<ReadableArtifact, ReadableAttribute<?>>> toReturn = - new LinkedList<Match<ReadableArtifact, ReadableAttribute<?>>>(); - - for (int i = 0; i < numProcessors; i++) { - startIndex = endIndex; - endIndex = startIndex + partitionSize; - if (i == 0) { - endIndex += remainder; - } - ResultsCallable worker = new ResultsCallable(toSanitize.subList(startIndex, endIndex)); - workers.add(worker); - } - - try { - for (Future<List<Match<ReadableArtifact, ReadableAttribute<?>>>> future : executor.invokeAll(workers)) { - toReturn.addAll(future.get()); - } - } catch (Exception ex) { - // - } - - return toReturn; - - } - - private ReadableArtifact sanitizeResult(ReadableArtifact result) throws OseeCoreException { - boolean allowed = true; - ReadableArtifact current = result; - while (current != null) { - if (notAllowed.contains(current.getName())) { - allowed = false; - break; - } - current = graph.getParent(current); - } - if (allowed) { - return result; - } else { - return null; - } - } - @Override public List<ReadableArtifact> getRelatedArtifacts(ReadableArtifact art, IRelationTypeSide relationTypeSide) throws OseeCoreException { - return graph.getRelatedArtifacts(art, relationTypeSide); + return sanitizer.sanitizeArtifacts(graph.getRelatedArtifacts(art, relationTypeSide)); } @Override public ReadableArtifact getRelatedArtifact(ReadableArtifact art, IRelationTypeSide relationTypeSide) throws OseeCoreException { - return graph.getRelatedArtifact(art, relationTypeSide); + return sanitizer.sanitizeArtifact(graph.getRelatedArtifact(art, relationTypeSide)); } @Override public ReadableArtifact getParent(ReadableArtifact art) throws OseeCoreException { - return getRelatedArtifact(art, CoreRelationTypes.Default_Hierarchical__Parent); + ReadableArtifact parent = null; + if (parentCache.containsKey(art)) { + parent = parentCache.get(art); + } else { + parent = getRelatedArtifact(art, CoreRelationTypes.Default_Hierarchical__Parent); + if (parent != null) { + parentCache.put(art, parent); + } + } + return sanitizer.sanitizeArtifact(parent); } @Override @@ -172,25 +123,4 @@ public class ArtifactProviderImpl implements ArtifactProvider { return toReturn; } - private class ResultsCallable implements Callable<List<Match<ReadableArtifact, ReadableAttribute<?>>>> { - - List<Match<ReadableArtifact, ReadableAttribute<?>>> toSanitize; - - public ResultsCallable(List<Match<ReadableArtifact, ReadableAttribute<?>>> toSanitize) { - this.toSanitize = toSanitize; - } - - @Override - public List<Match<ReadableArtifact, ReadableAttribute<?>>> call() throws Exception { - Iterator<Match<ReadableArtifact, ReadableAttribute<?>>> it = toSanitize.iterator(); - while (it.hasNext()) { - Match<ReadableArtifact, ReadableAttribute<?>> match = it.next(); - ReadableArtifact matchedArtifact = match.getItem(); - if (sanitizeResult(matchedArtifact) == null) { - it.remove(); - } - } - return toSanitize; - } - } } diff --git a/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/ArtifactSanitizer.java b/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/ArtifactSanitizer.java new file mode 100644 index 00000000000..a6bcbfbd94b --- /dev/null +++ b/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/ArtifactSanitizer.java @@ -0,0 +1,129 @@ +/******************************************************************************* + * Copyright (c) 2011 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.display.presenter; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import org.eclipse.osee.display.api.search.ArtifactProvider; +import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.orcs.data.ReadableArtifact; +import org.eclipse.osee.orcs.data.ReadableAttribute; +import org.eclipse.osee.orcs.search.Match; + +/** + * @author John Misinco + */ +public class ArtifactSanitizer { + + protected final ArtifactProvider provider; + + public ArtifactSanitizer(ArtifactProvider provider) { + this.provider = provider; + } + + protected static final List<String> notAllowed = new ArrayList<String>(); + static { + notAllowed.add("Technical Approaches"); + notAllowed.add("Technical Performance Parameters"); + notAllowed.add("Recent Imports"); + notAllowed.add("Test"); + notAllowed.add("Interface Requirements"); + notAllowed.add("Test Procedures"); + } + + public List<Match<ReadableArtifact, ReadableAttribute<?>>> sanitizeSearchResults(List<Match<ReadableArtifact, ReadableAttribute<?>>> toSanitize) { + int numProcessors = Runtime.getRuntime().availableProcessors(); + int partitionSize = toSanitize.size() / numProcessors; + int remainder = toSanitize.size() % numProcessors; + ExecutorService executor = Executors.newFixedThreadPool(numProcessors); + int startIndex = 0; + int endIndex = 0; + List<ResultsCallable> workers = new LinkedList<ResultsCallable>(); + List<Match<ReadableArtifact, ReadableAttribute<?>>> toReturn = + new LinkedList<Match<ReadableArtifact, ReadableAttribute<?>>>(); + + for (int i = 0; i < numProcessors; i++) { + startIndex = endIndex; + endIndex = startIndex + partitionSize; + if (i == 0) { + endIndex += remainder; + } + ResultsCallable worker = new ResultsCallable(toSanitize.subList(startIndex, endIndex)); + workers.add(worker); + } + + try { + for (Future<List<Match<ReadableArtifact, ReadableAttribute<?>>>> future : executor.invokeAll(workers)) { + toReturn.addAll(future.get()); + } + } catch (Exception ex) { + // + } + + return toReturn; + + } + + public ReadableArtifact sanitizeArtifact(ReadableArtifact result) throws OseeCoreException { + boolean allowed = true; + ReadableArtifact current = result; + while (current != null) { + if (notAllowed.contains(current.getName())) { + allowed = false; + break; + } + current = provider.getParent(current); + } + if (allowed) { + return result; + } else { + return null; + } + } + + public List<ReadableArtifact> sanitizeArtifacts(List<ReadableArtifact> arts) throws OseeCoreException { + Iterator<ReadableArtifact> it = arts.iterator(); + while (it.hasNext()) { + if (sanitizeArtifact(it.next()) == null) { + it.remove(); + } + } + return arts; + } + + private class ResultsCallable implements Callable<List<Match<ReadableArtifact, ReadableAttribute<?>>>> { + + List<Match<ReadableArtifact, ReadableAttribute<?>>> toSanitize; + + public ResultsCallable(List<Match<ReadableArtifact, ReadableAttribute<?>>> toSanitize) { + this.toSanitize = toSanitize; + } + + @Override + public List<Match<ReadableArtifact, ReadableAttribute<?>>> call() throws Exception { + Iterator<Match<ReadableArtifact, ReadableAttribute<?>>> it = toSanitize.iterator(); + while (it.hasNext()) { + Match<ReadableArtifact, ReadableAttribute<?>> match = it.next(); + ReadableArtifact matchedArtifact = match.getItem(); + if (sanitizeArtifact(matchedArtifact) == null) { + it.remove(); + } + } + return toSanitize; + } + } +} diff --git a/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/SearchPresenterImpl.java b/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/SearchPresenterImpl.java index ef985012f0b..83b35720bb2 100644 --- a/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/SearchPresenterImpl.java +++ b/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/SearchPresenterImpl.java @@ -44,6 +44,7 @@ import org.eclipse.osee.framework.core.model.type.RelationType; import org.eclipse.osee.framework.jdk.core.type.MatchLocation; import org.eclipse.osee.framework.jdk.core.util.Lib; import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.logger.Log; import org.eclipse.osee.orcs.data.ReadableArtifact; import org.eclipse.osee.orcs.data.ReadableAttribute; import org.eclipse.osee.orcs.search.Match; @@ -57,9 +58,11 @@ public class SearchPresenterImpl<T extends SearchHeaderComponent, K extends View private final static String SIDE_A_KEY = "sideAName"; private final static String SIDE_B_KEY = "sideBName"; + protected final Log logger; - public SearchPresenterImpl(ArtifactProvider artifactProvider) { + public SearchPresenterImpl(ArtifactProvider artifactProvider, Log logger) { this.artifactProvider = artifactProvider; + this.logger = logger; } @Override @@ -76,7 +79,7 @@ public class SearchPresenterImpl<T extends SearchHeaderComponent, K extends View return; } - // options.setDisplayOptions(new DisplayOptions(params.isVerbose())); + options.setDisplayOptions(new DisplayOptions(params.isVerbose())); List<Match<ReadableArtifact, ReadableAttribute<?>>> searchResults = null; try { @@ -91,6 +94,7 @@ public class SearchPresenterImpl<T extends SearchHeaderComponent, K extends View try { processSearchResults(searchResults, searchResultsComp, params); } catch (Exception ex) { + logger.error(ex, "Error in processSearchResults"); setErrorMessage(searchResultsComp, Lib.exceptionToString(ex)); return; } @@ -127,7 +131,7 @@ public class SearchPresenterImpl<T extends SearchHeaderComponent, K extends View value = getParametersAsEncodedUrl(params); oseeNavigator.navigateArtifactPage("/" + value); } catch (UnsupportedEncodingException ex) { - // setErrorMessage(artifact, Lib.exceptionToString(ex)); + logger.error(ex, "Error in selectArtifact"); } } @@ -151,8 +155,9 @@ public class SearchPresenterImpl<T extends SearchHeaderComponent, K extends View ReadableArtifact displayArt = null; try { displayArt = artifactProvider.getArtifactByGuid(TokenFactory.createBranch(branch, ""), art); - } catch (Exception e) { - setErrorMessage(artHeaderComp, String.format("Error while loading artifact[%s] from branch:[%s]", art, branch)); + } catch (Exception ex) { + logger.error(ex, "Error in initArtifactPage"); + setErrorMessage(artHeaderComp, Lib.exceptionToString(ex)); return; } if (displayArt == null) { @@ -163,8 +168,9 @@ public class SearchPresenterImpl<T extends SearchHeaderComponent, K extends View ViewArtifact artifact = null; try { artifact = convertToViewArtifact(displayArt, true); - } catch (Exception e) { - setErrorMessage(artHeaderComp, String.format("Error while converting [%s] from branch:[%s]", art, branch)); + } catch (Exception ex) { + logger.error(ex, "Error in initArtifactPage"); + setErrorMessage(artHeaderComp, Lib.exceptionToString(ex)); return; } @@ -175,8 +181,9 @@ public class SearchPresenterImpl<T extends SearchHeaderComponent, K extends View Collection<RelationType> relationTypes = null; try { relationTypes = artifactProvider.getValidRelationTypes(displayArt); - } catch (Exception e) { - setErrorMessage(relComp, String.format("Error loading relation types for: [%s]", displayArt.getName())); + } catch (Exception ex) { + logger.error(ex, "Error in initArtifactPage"); + setErrorMessage(relComp, Lib.exceptionToString(ex)); return; } for (RelationType relTypeSide : relationTypes) { @@ -191,7 +198,8 @@ public class SearchPresenterImpl<T extends SearchHeaderComponent, K extends View try { attributeTypes = displayArt.getAttributeTypes(); } catch (Exception ex) { - setErrorMessage(attrComp, String.format("Error loading attributes for: [%s]", displayArt.getName())); + logger.error(ex, "Error in initArtifactPage"); + setErrorMessage(attrComp, Lib.exceptionToString(ex)); return; } for (IAttributeType attrType : attributeTypes) { @@ -202,7 +210,8 @@ public class SearchPresenterImpl<T extends SearchHeaderComponent, K extends View attrComp.addAttribute(attrType.getName(), value.getDisplayableString()); } } catch (Exception ex) { - setErrorMessage(attrComp, String.format("Error loading attributes for: [%s]", displayArt.getName())); + logger.error(ex, "Error in initArtifactPage"); + setErrorMessage(attrComp, Lib.exceptionToString(ex)); return; } } @@ -231,8 +240,8 @@ public class SearchPresenterImpl<T extends SearchHeaderComponent, K extends View artifactProvider.getRelatedArtifacts(sourceArt, TokenFactory.createRelationTypeSide(RelationSide.SIDE_B, type.getGuid(), type.getName())); } catch (Exception ex) { - setErrorMessage(relationComponent, - String.format("Error loading relations for artifact[%s]", artifact.getGuid())); + logger.error(ex, "Error in selectRelationType"); + setErrorMessage(relationComponent, Lib.exceptionToString(ex)); return; } @@ -258,8 +267,8 @@ public class SearchPresenterImpl<T extends SearchHeaderComponent, K extends View relationComponent.addRightRelated(id); } } catch (Exception ex) { - setErrorMessage(relationComponent, - String.format("Error adding artifact[%s] to relation relation component", artifact.getGuid())); + logger.error(ex, "Error in selectRelationType"); + setErrorMessage(relationComponent, Lib.exceptionToString(ex)); return; } } @@ -393,6 +402,7 @@ public class SearchPresenterImpl<T extends SearchHeaderComponent, K extends View @Override public void selectSearch(String url, K params, SearchNavigator navigator) { + //do nothing for now } } diff --git a/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/Utility.java b/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/Utility.java index 8cde81925f5..d69f1b4e831 100644 --- a/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/Utility.java +++ b/plugins/org.eclipse.osee.display.presenter/src/org/eclipse/osee/display/presenter/Utility.java @@ -102,7 +102,7 @@ public final class Utility { url.append(encode(entry.getKey())); url.append("="); url.append(encode(entry.getValue())); - url.append("?"); + url.append("&"); } catch (UnsupportedEncodingException ex) { // } diff --git a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/ds/criteria/CriteriaAttributeOther.java b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/ds/criteria/CriteriaAttributeOther.java index a165cae8efd..d111305b6ce 100644 --- a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/ds/criteria/CriteriaAttributeOther.java +++ b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/ds/criteria/CriteriaAttributeOther.java @@ -14,9 +14,11 @@ import java.util.Collection; import org.eclipse.osee.framework.core.data.IAttributeType; import org.eclipse.osee.framework.core.exception.OseeArgumentException; import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.util.Conditions; import org.eclipse.osee.orcs.core.ds.Criteria; import org.eclipse.osee.orcs.core.ds.QueryOptions; import org.eclipse.osee.orcs.search.Operator; +import org.eclipse.osee.orcs.search.QueryBuilder; /** * @author Roberto E. Escobar @@ -49,6 +51,10 @@ public class CriteriaAttributeOther extends Criteria { @Override public void checkValid(QueryOptions options) throws OseeCoreException { super.checkValid(options); + Conditions.checkNotNull(getAttributeType(), "attributeType"); + Conditions.checkExpressionFailOnTrue(getAttributeType().equals(QueryBuilder.ANY_ATTRIBUTE_TYPE), + "Any attribute type is not allowed"); + Operator operator = getOperator(); for (String value : getValues()) { if (value != null && value.contains("%") && operator.isGreaterThanOrLessThan()) { diff --git a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/OrcsApiImpl.java b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/OrcsApiImpl.java index 63eb8a103e5..7e24711b800 100644 --- a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/OrcsApiImpl.java +++ b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/OrcsApiImpl.java @@ -84,7 +84,7 @@ public class OrcsApiImpl implements OrcsApi { new OrcsObjectLoader(logger, dataLoader, artifactFactory, attributeFactory, dataStoreTypeCache.getArtifactTypeCache(), cacheService.getBranchCache()); - criteriaFctry = new CriteriaFactory(); + criteriaFctry = new CriteriaFactory(getDataStoreTypeCache().getAttributeTypeCache()); queryExecutor = new QueryExecutor(executorAdmin, queryEngine, objectLoader); } diff --git a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/OrcsObjectLoader.java b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/OrcsObjectLoader.java index 49e05e6ddc5..08171a3531a 100644 --- a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/OrcsObjectLoader.java +++ b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/OrcsObjectLoader.java @@ -11,9 +11,9 @@ package org.eclipse.osee.orcs.core.internal; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import org.eclipse.osee.framework.core.exception.OseeCoreException; import org.eclipse.osee.framework.core.model.cache.ArtifactTypeCache; import org.eclipse.osee.framework.core.model.cache.BranchCache; @@ -80,10 +80,8 @@ public class OrcsObjectLoader { private static class ArtifactCollectorImpl implements ArtifactCollector, RelationRowHandlerFactory, AttributeRowHandlerFactory { - private final Map<Integer, RelationContainer> relationContainers = - new ConcurrentHashMap<Integer, RelationContainer>();; - private final Map<Integer, AttributeContainer> attributeContainers = - new ConcurrentHashMap<Integer, AttributeContainer>(); + private final Map<Integer, RelationContainer> relationContainers = new HashMap<Integer, RelationContainer>();; + private final Map<Integer, AttributeContainer> attributeContainers = new HashMap<Integer, AttributeContainer>(); private final List<ReadableArtifact> artifacts; diff --git a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/search/CriteriaFactory.java b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/search/CriteriaFactory.java index 0b2c17679d5..5c731e636d3 100644 --- a/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/search/CriteriaFactory.java +++ b/plugins/org.eclipse.osee.orcs.core/src/org/eclipse/osee/orcs/core/internal/search/CriteriaFactory.java @@ -11,11 +11,14 @@ package org.eclipse.osee.orcs.core.internal.search; import java.util.Collection; +import java.util.LinkedList; import java.util.Set; import org.eclipse.osee.framework.core.data.IArtifactType; import org.eclipse.osee.framework.core.data.IAttributeType; import org.eclipse.osee.framework.core.data.IRelationTypeSide; import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.core.model.cache.AttributeTypeCache; +import org.eclipse.osee.framework.core.model.type.AttributeType; import org.eclipse.osee.orcs.core.ds.Criteria; import org.eclipse.osee.orcs.core.ds.criteria.CriteriaArtifactGuids; import org.eclipse.osee.orcs.core.ds.criteria.CriteriaArtifactHrids; @@ -27,6 +30,7 @@ import org.eclipse.osee.orcs.core.ds.criteria.CriteriaAttributeTypeExists; import org.eclipse.osee.orcs.core.ds.criteria.CriteriaRelationTypeExists; import org.eclipse.osee.orcs.search.CaseType; import org.eclipse.osee.orcs.search.Operator; +import org.eclipse.osee.orcs.search.QueryBuilder; import org.eclipse.osee.orcs.search.StringOperator; /** @@ -35,6 +39,24 @@ import org.eclipse.osee.orcs.search.StringOperator; @SuppressWarnings("unused") public class CriteriaFactory { + private final AttributeTypeCache attributeTypeCache; + + public CriteriaFactory(AttributeTypeCache attributeTypeCache) { + this.attributeTypeCache = attributeTypeCache; + } + + private Collection<? extends IAttributeType> checkForAnyType(Collection<? extends IAttributeType> attributeTypes) throws OseeCoreException { + Collection<? extends IAttributeType> toReturn; + if (attributeTypes.contains(QueryBuilder.ANY_ATTRIBUTE_TYPE)) { + Collection<AttributeType> temp = new LinkedList<AttributeType>(); + temp.addAll(attributeTypeCache.getAll()); + toReturn = temp; + } else { + toReturn = attributeTypes; + } + return toReturn; + } + public Criteria createExistsCriteria(Collection<? extends IAttributeType> attributeTypes) throws OseeCoreException { return new CriteriaAttributeTypeExists(attributeTypes); } @@ -47,8 +69,9 @@ public class CriteriaFactory { return new CriteriaAttributeOther(attributeType, values, operator); } - public Criteria createAttributeCriteria(Collection<? extends IAttributeType> attributeType, StringOperator operator, CaseType match, String value) throws OseeCoreException { - return new CriteriaAttributeKeyword(attributeType, value, operator, match); + public Criteria createAttributeCriteria(Collection<? extends IAttributeType> attributeTypes, StringOperator operator, CaseType match, String value) throws OseeCoreException { + Collection<? extends IAttributeType> toReturn = checkForAnyType(attributeTypes); + return new CriteriaAttributeKeyword(toReturn, value, operator, match); } public Criteria createArtifactTypeCriteria(Collection<? extends IArtifactType> artifactTypes) throws OseeCoreException { diff --git a/plugins/org.eclipse.osee.orcs.db.test/src/org/eclipse/osee/orcs/db/internal/search/SqlBuilderTest.java b/plugins/org.eclipse.osee.orcs.db.test/src/org/eclipse/osee/orcs/db/internal/search/SqlBuilderTest.java index 420a27d7f35..96c59482cc3 100644 --- a/plugins/org.eclipse.osee.orcs.db.test/src/org/eclipse/osee/orcs/db/internal/search/SqlBuilderTest.java +++ b/plugins/org.eclipse.osee.orcs.db.test/src/org/eclipse/osee/orcs/db/internal/search/SqlBuilderTest.java @@ -377,7 +377,7 @@ public class SqlBuilderTest { Assert.assertEquals( "SELECT art1.art_id, txs1.branch_id\n" + // " FROM \n" + // - "osee_search_tags tag1, osee_search_tags tag2, osee_search_tags tag3, osee_join_id jid1, osee_attribute att1, osee_txs txs1, osee_artifact art1, osee_txs txs2\n" + // + "osee_join_id jid1, osee_attribute att1, osee_txs txs1, osee_search_tags tag1, osee_search_tags tag2, osee_search_tags tag3, osee_artifact art1, osee_txs txs2\n" + // " WHERE \n" + // "att1.attr_type_id = jid1.id AND jid1.query_id = ?\n" + // " AND \n" + // @@ -421,7 +421,7 @@ public class SqlBuilderTest { Assert.assertEquals( "SELECT art1.art_id, txs1.branch_id\n" + // " FROM \n" + // - "osee_attribute att1, osee_txs txs1, osee_artifact art1, osee_txs txs2, osee_search_tags tag1, osee_search_tags tag2, osee_search_tags tag3, osee_join_id jid1, osee_attribute att2, osee_txs txs3\n" + // + "osee_attribute att1, osee_txs txs1, osee_artifact art1, osee_txs txs2, osee_join_id jid1, osee_attribute att2, osee_txs txs3, osee_search_tags tag1, osee_search_tags tag2, osee_search_tags tag3\n" + // " WHERE \n" + // "att1.attr_type_id = ? AND att1.value = ?\n" + // " AND \n" + // diff --git a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/handlers/AttributeTokenSqlHandler.java b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/handlers/AttributeTokenSqlHandler.java index 3abfcdb6a6b..fb04ff85dfb 100644 --- a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/handlers/AttributeTokenSqlHandler.java +++ b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/handlers/AttributeTokenSqlHandler.java @@ -30,7 +30,6 @@ import org.eclipse.osee.orcs.db.internal.search.tagger.TagProcessor; import org.eclipse.osee.orcs.db.internal.search.util.AbstractQueryPostProcessor; import org.eclipse.osee.orcs.db.internal.search.util.AttributeQueryPostProcessor; import org.eclipse.osee.orcs.db.internal.search.util.TokenQueryPostProcessor; -import org.eclipse.osee.orcs.search.QueryBuilder; import org.eclipse.osee.orcs.search.StringOperator; /** @@ -60,12 +59,18 @@ public class AttributeTokenSqlHandler extends SqlHandler { @Override public void addTables(SqlWriter writer) throws OseeCoreException { - if (criteria.getTypes().contains(QueryBuilder.ANY_ATTRIBUTE_TYPE)) { - types = getTypeCaches().getAttributeTypeCache().getAll(); - } else { - types = criteria.getTypes(); + types = criteria.getTypes(); + + if (types.size() > 1) { + jIdAlias = writer.writeTable(TableEnum.ID_JOIN_TABLE); } + List<String> aliases = writer.getAliases(TableEnum.ARTIFACT_TABLE); + List<String> txs = writer.getAliases(TableEnum.TXS_TABLE); + + attrAlias = writer.writeTable(TableEnum.ATTRIBUTE_TABLE); + txsAlias1 = writer.writeTable(TableEnum.TXS_TABLE); + StringOperator operator = criteria.getStringOp(); if (requiresTokenizing(operator)) { codedTags = new ArrayList<Long>(); @@ -77,16 +82,6 @@ public class AttributeTokenSqlHandler extends SqlHandler { } } - if (types.size() > 1) { - jIdAlias = writer.writeTable(TableEnum.ID_JOIN_TABLE); - } - - List<String> aliases = writer.getAliases(TableEnum.ARTIFACT_TABLE); - List<String> txs = writer.getAliases(TableEnum.TXS_TABLE); - - attrAlias = writer.writeTable(TableEnum.ATTRIBUTE_TABLE); - txsAlias1 = writer.writeTable(TableEnum.TXS_TABLE); - if (aliases.isEmpty()) { artAlias2 = writer.writeTable(TableEnum.ARTIFACT_TABLE); } diff --git a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/tagger/TaggingEngine.java b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/tagger/TaggingEngine.java index 7d49f26afa1..f00ec8395fa 100644 --- a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/tagger/TaggingEngine.java +++ b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/tagger/TaggingEngine.java @@ -20,6 +20,7 @@ import org.eclipse.osee.framework.core.model.type.AttributeType; import org.eclipse.osee.framework.core.util.Conditions; import org.eclipse.osee.framework.jdk.core.type.MatchLocation; import org.eclipse.osee.framework.jdk.core.util.Lib; +import org.eclipse.osee.framework.jdk.core.util.Strings; import org.eclipse.osee.orcs.data.ReadableAttribute; import org.eclipse.osee.orcs.db.internal.search.util.WordOrderMatcher; import org.eclipse.osee.orcs.search.CaseType; @@ -48,19 +49,34 @@ public class TaggingEngine { return getTagger("DefaultAttributeTaggerProvider"); } + private String normalize(String alias) { + String key = alias; + if (Strings.isValid(key) && key.contains(".")) { + key = Lib.getExtension(key); + } + return key; + } + + public String getTaggerId(Identity<Long> identity) throws OseeCoreException { + AttributeType attributeType = attributeTypeCache.get(identity); + Conditions.checkNotNull(attributeType, "attributeType", "Unable to find attribute type with identity [%s]", + identity); + String taggerId = attributeType.getTaggerId(); + return normalize(taggerId); + } + public Tagger getTagger(Identity<Long> identity) throws OseeCoreException { AttributeType attributeType = attributeTypeCache.get(identity); Conditions.checkNotNull(attributeType, "attributeType", "Unable to find attribute type with identity [%s]", identity); String taggerId = attributeType.getTaggerId(); + Conditions.checkNotNull(taggerId, "taggerId", "Attribute type [%s] has no tagger defined", + attributeType.getName()); return getTagger(taggerId); } - private Tagger getTagger(String alias) throws OseeCoreException { - String key = alias; - if (key.contains(".")) { - key = Lib.getExtension(key); - } + public Tagger getTagger(String alias) throws OseeCoreException { + String key = normalize(alias); Tagger tagger = taggers.get(key); Conditions.checkNotNull(tagger, "tagger", "Unable to find tagger for [%s]", alias); return tagger; diff --git a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/util/AbstractQueryPostProcessor.java b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/util/AbstractQueryPostProcessor.java index 485429c7f20..3b786aed182 100644 --- a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/util/AbstractQueryPostProcessor.java +++ b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/util/AbstractQueryPostProcessor.java @@ -76,12 +76,14 @@ public abstract class AbstractQueryPostProcessor implements QueryPostProcessor { try { if (getTypes().contains(attribute.getAttributeType())) { Tagger tagger = getTagger(attribute); - List<MatchLocation> locations = tagger.find(attribute, getQuery(), getCaseType(), true); - if (!locations.isEmpty()) { - if (matchedAttributes == null) { - matchedAttributes = new HashMap<ReadableAttribute<?>, List<MatchLocation>>(); + if (tagger != null) { + List<MatchLocation> locations = tagger.find(attribute, getQuery(), getCaseType(), true); + if (!locations.isEmpty()) { + if (matchedAttributes == null) { + matchedAttributes = new HashMap<ReadableAttribute<?>, List<MatchLocation>>(); + } + matchedAttributes.put(attribute, locations); } - matchedAttributes.put(attribute, locations); } } } catch (Exception ex) { diff --git a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/util/TokenQueryPostProcessor.java b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/util/TokenQueryPostProcessor.java index 3b431d4dc90..85afd08acc6 100644 --- a/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/util/TokenQueryPostProcessor.java +++ b/plugins/org.eclipse.osee.orcs.db/src/org/eclipse/osee/orcs/db/internal/search/util/TokenQueryPostProcessor.java @@ -11,6 +11,7 @@ package org.eclipse.osee.orcs.db.internal.search.util; import org.eclipse.osee.framework.core.exception.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Strings; import org.eclipse.osee.logger.Log; import org.eclipse.osee.orcs.data.ReadableAttribute; import org.eclipse.osee.orcs.db.internal.search.tagger.Tagger; @@ -30,6 +31,11 @@ public class TokenQueryPostProcessor extends AbstractQueryPostProcessor { @Override protected Tagger getTagger(ReadableAttribute<?> attribute) throws OseeCoreException { - return engine.getTagger(attribute.getAttributeType()); + String taggerId = engine.getTaggerId(attribute.getAttributeType()); + Tagger toReturn = null; + if (Strings.isValid(taggerId)) { + toReturn = engine.getTagger(taggerId); + } + return toReturn; } } |