diff options
author | jmisinco | 2016-08-05 16:01:57 +0000 |
---|---|---|
committer | donald.g.dunne | 2016-09-02 00:21:21 +0000 |
commit | 3d3479c32dd88e397301d0f1878e048f3eebdace (patch) | |
tree | 797973fc07c17b745baf697f2f12defbc40f2685 /plugins/org.eclipse.osee.orcs.rest | |
parent | 4791dc347a2402a562146dcd780c37b25381cb42 (diff) | |
download | org.eclipse.osee-3d3479c32dd88e397301d0f1878e048f3eebdace.tar.gz org.eclipse.osee-3d3479c32dd88e397301d0f1878e048f3eebdace.tar.xz org.eclipse.osee-3d3479c32dd88e397301d0f1878e048f3eebdace.zip |
refactor[ats_ATS307494]: Move ORCS writer to rest bundle
Change-Id: Ica8a92e5d357356dc49bb1b249547bbb3451dcc7
Diffstat (limited to 'plugins/org.eclipse.osee.orcs.rest')
16 files changed, 1020 insertions, 45 deletions
diff --git a/plugins/org.eclipse.osee.orcs.rest/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.orcs.rest/META-INF/MANIFEST.MF index f2bd98f4c74..4ee9126ccc4 100644 --- a/plugins/org.eclipse.osee.orcs.rest/META-INF/MANIFEST.MF +++ b/plugins/org.eclipse.osee.orcs.rest/META-INF/MANIFEST.MF @@ -41,12 +41,12 @@ Import-Package: com.google.common.base;version="15.0.0", org.eclipse.osee.orcs.data, org.eclipse.osee.orcs.rest.model, org.eclipse.osee.orcs.rest.model.search.artifact, + org.eclipse.osee.orcs.rest.model.writer, + org.eclipse.osee.orcs.rest.model.writer.config, + org.eclipse.osee.orcs.rest.model.writer.reader, org.eclipse.osee.orcs.search, org.eclipse.osee.orcs.transaction, org.eclipse.osee.orcs.utility, - org.eclipse.osee.orcs.writer, - org.eclipse.osee.orcs.writer.model.config, - org.eclipse.osee.orcs.writer.model.reader, org.osgi.service.event;version="1.3.1" Osee-JaxRs-Resource: OSEE-INF/web/script/*;path=/orcs/script/ui, OSEE-INF/web/example/*;path=/orcs/example/ui, diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/IOrcsValidationHelper.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/IOrcsValidationHelper.java new file mode 100644 index 00000000000..d20454340d1 --- /dev/null +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/IOrcsValidationHelper.java @@ -0,0 +1,32 @@ +/******************************************************************************* + * Copyright (c) 2015 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.orcs.rest.internal.writer; + +/** + * @author Donald G. Dunne + */ +public interface IOrcsValidationHelper { + + boolean isBranchExists(long branchUuid); + + boolean isUserExists(String userId); + + boolean isArtifactTypeExist(long artifactTypeUuid); + + boolean isRelationTypeExist(long relationTypeUuid); + + boolean isAttributeTypeExists(long attributeTypeUuid); + + public boolean isArtifactExists(long branchUuid, long artifactUuid); + + boolean isAttributeTypeExists(String attributeTypeName); + +} diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsCollectorValidator.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsCollectorValidator.java index 6ce8423a4d2..b2d02db7777 100644 --- a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsCollectorValidator.java +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsCollectorValidator.java @@ -17,16 +17,14 @@ import java.util.Set; import org.eclipse.osee.framework.core.util.XResultData; import org.eclipse.osee.framework.jdk.core.util.Strings; import org.eclipse.osee.orcs.OrcsApi; -import org.eclipse.osee.orcs.writer.IOrcsValidationHelper; -import org.eclipse.osee.orcs.writer.OrcsValidationHelperAdapter; -import org.eclipse.osee.orcs.writer.model.reader.OwArtifact; -import org.eclipse.osee.orcs.writer.model.reader.OwArtifactToken; -import org.eclipse.osee.orcs.writer.model.reader.OwArtifactType; -import org.eclipse.osee.orcs.writer.model.reader.OwAttribute; -import org.eclipse.osee.orcs.writer.model.reader.OwAttributeType; -import org.eclipse.osee.orcs.writer.model.reader.OwCollector; -import org.eclipse.osee.orcs.writer.model.reader.OwRelation; -import org.eclipse.osee.orcs.writer.model.reader.OwRelationType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifact; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactToken; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwAttribute; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwAttributeType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwCollector; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwRelation; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwRelationType; /** * @author Donald G. Dunne diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsCollectorWriter.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsCollectorWriter.java index b990deb8b9c..07937a669e1 100644 --- a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsCollectorWriter.java +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsCollectorWriter.java @@ -32,15 +32,15 @@ import org.eclipse.osee.framework.jdk.core.util.Lib; import org.eclipse.osee.framework.jdk.core.util.Strings; import org.eclipse.osee.orcs.OrcsApi; import org.eclipse.osee.orcs.data.ArtifactReadable; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifact; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactToken; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwAttribute; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwAttributeType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwCollector; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwRelation; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwRelationType; import org.eclipse.osee.orcs.transaction.TransactionBuilder; -import org.eclipse.osee.orcs.writer.model.reader.OwArtifact; -import org.eclipse.osee.orcs.writer.model.reader.OwArtifactToken; -import org.eclipse.osee.orcs.writer.model.reader.OwArtifactType; -import org.eclipse.osee.orcs.writer.model.reader.OwAttribute; -import org.eclipse.osee.orcs.writer.model.reader.OwAttributeType; -import org.eclipse.osee.orcs.writer.model.reader.OwCollector; -import org.eclipse.osee.orcs.writer.model.reader.OwRelation; -import org.eclipse.osee.orcs.writer.model.reader.OwRelationType; /** * @author Donald G. Dunne diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsValidationHelperAdapter.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsValidationHelperAdapter.java new file mode 100644 index 00000000000..a9b212fd070 --- /dev/null +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsValidationHelperAdapter.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2015 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.orcs.rest.internal.writer; + +import static org.eclipse.osee.framework.core.enums.CoreBranches.COMMON_ID; +import org.eclipse.osee.framework.core.data.IAttributeType; +import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; +import org.eclipse.osee.orcs.OrcsApi; + +/** + * @author Donald G. Dunne + */ +public class OrcsValidationHelperAdapter implements IOrcsValidationHelper { + + private final OrcsApi orcsApi; + + public OrcsValidationHelperAdapter(OrcsApi orcsApi) { + this.orcsApi = orcsApi; + } + + @Override + public boolean isBranchExists(long branchUuid) { + return orcsApi.getQueryFactory().branchQuery().andUuids(branchUuid).getResultsAsId().size() == 1; + } + + @Override + public boolean isUserExists(String userId) { + return orcsApi.getQueryFactory().fromBranch(COMMON_ID).and(CoreAttributeTypes.UserId, + userId).getResults().getAtMostOneOrNull() != null; + } + + @Override + public boolean isArtifactExists(long branchUuid, long artifactUuid) { + int matchedArtifacts = orcsApi.getQueryFactory().fromBranch(branchUuid).andUuid(artifactUuid).getResults().size(); + return matchedArtifacts == 1; + } + + @Override + public boolean isArtifactTypeExist(long artifactTypeUuid) { + return orcsApi.getOrcsTypes().getArtifactTypes().getByUuid(artifactTypeUuid) != null; + } + + @Override + public boolean isRelationTypeExist(long relationTypeUuid) { + return orcsApi.getOrcsTypes().getRelationTypes().getByUuid(relationTypeUuid) != null; + } + + @Override + public boolean isAttributeTypeExists(long attributeTypeUuid) { + return orcsApi.getOrcsTypes().getAttributeTypes().getByUuid(attributeTypeUuid) != null; + } + + @Override + public boolean isAttributeTypeExists(String attributeTypeName) { + for (IAttributeType type : orcsApi.getOrcsTypes().getAttributeTypes().getAll()) { + if (type.getName().equals(attributeTypeName)) { + return true; + } + } + return false; + } + +} diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterCollectorGenerator.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterCollectorGenerator.java index 896ff0854f9..984ea58c8a5 100644 --- a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterCollectorGenerator.java +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterCollectorGenerator.java @@ -28,18 +28,17 @@ import org.eclipse.osee.framework.core.enums.CoreRelationTypes; import org.eclipse.osee.framework.core.enums.SystemUser; import org.eclipse.osee.framework.jdk.core.util.Lib; import org.eclipse.osee.orcs.OrcsApi; -import org.eclipse.osee.orcs.writer.model.config.OrcsWriterInputConfig; -import org.eclipse.osee.orcs.writer.model.config.OrcsWriterRelationSide; -import org.eclipse.osee.orcs.writer.model.config.OrcsWriterToken; -import org.eclipse.osee.orcs.writer.model.reader.OwArtifact; -import org.eclipse.osee.orcs.writer.model.reader.OwArtifactToken; -import org.eclipse.osee.orcs.writer.model.reader.OwArtifactType; -import org.eclipse.osee.orcs.writer.model.reader.OwAttributeType; -import org.eclipse.osee.orcs.writer.model.reader.OwBranch; -import org.eclipse.osee.orcs.writer.model.reader.OwCollector; -import org.eclipse.osee.orcs.writer.model.reader.OwFactory; -import org.eclipse.osee.orcs.writer.model.reader.OwRelation; -import org.eclipse.osee.orcs.writer.model.reader.OwRelationType; +import org.eclipse.osee.orcs.rest.model.writer.OrcsWriterToken; +import org.eclipse.osee.orcs.rest.model.writer.config.OrcsWriterInputConfig; +import org.eclipse.osee.orcs.rest.model.writer.config.OrcsWriterRelationSide; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifact; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactToken; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwAttributeType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwBranch; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwCollector; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwRelation; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwRelationType; /** * @author Donald G. Dunne diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterEndpointImpl.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterEndpointImpl.java index f13053c00dd..e1311251559 100644 --- a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterEndpointImpl.java +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterEndpointImpl.java @@ -20,9 +20,8 @@ import org.eclipse.osee.framework.core.util.XResultData; import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException; import org.eclipse.osee.orcs.OrcsApi; import org.eclipse.osee.orcs.rest.model.OrcsWriterEndpoint; -import org.eclipse.osee.orcs.writer.OrcsWriterExcelReader; -import org.eclipse.osee.orcs.writer.model.config.OrcsWriterInputConfig; -import org.eclipse.osee.orcs.writer.model.reader.OwCollector; +import org.eclipse.osee.orcs.rest.model.writer.config.OrcsWriterInputConfig; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwCollector; /** * @author Donald G. Dunne diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterExcelReader.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterExcelReader.java new file mode 100644 index 00000000000..bb231a704e3 --- /dev/null +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterExcelReader.java @@ -0,0 +1,168 @@ +/******************************************************************************* + * Copyright (c) 2015 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.orcs.rest.internal.writer; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URI; +import org.eclipse.osee.framework.core.util.XResultData; +import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelSaxHandler; +import org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwCollector; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.XMLReaderFactory; + +/** + * @author Donald G. Dunne + */ +public class OrcsWriterExcelReader { + + private OwCollector collector; + private final XResultData result; + + public OrcsWriterExcelReader(XResultData result) { + this.result = result; + } + + public void run(URI source) throws SAXException, IOException, UnsupportedEncodingException, MalformedURLException { + collector = new OwCollector(); + XMLReader xmlReader = XMLReaderFactory.createXMLReader(); + xmlReader.setContentHandler(new ExcelSaxHandler(new ExcelRowProcessor(collector, result), true)); + InputStreamReader inputStreamReader = new InputStreamReader(source.toURL().openStream(), "UTF-8"); + xmlReader.parse(new InputSource(inputStreamReader)); + inputStreamReader.close(); + } + + public void run(InputStream source) throws SAXException, IOException, UnsupportedEncodingException, MalformedURLException { + collector = new OwCollector(); + XMLReader xmlReader = XMLReaderFactory.createXMLReader(); + xmlReader.setContentHandler(new ExcelSaxHandler(new ExcelRowProcessor(collector, result), true)); + xmlReader.parse(new InputSource(source)); + } + + private static final class ExcelRowProcessor implements RowProcessor { + + private final OwCollector collector; + private OrcsWriterSheetProcessorForCreateUpdate createSheet; + private OrcsWriterSheetProcessorForSettings settingsSheet; + private String sheetName = ""; + private final XResultData result; + private OrcsWriterSheetProcessorForCreateUpdate updateSheet; + private OrcsWriterSheetProcessorForDelete deleteSheet; + + public ExcelRowProcessor(OwCollector collector, XResultData result) { + this.collector = collector; + this.result = result; + } + + @Override + public void detectedRowAndColumnCounts(int rowCount, int columnCount) { + // do nothing + } + + @Override + public void foundStartOfWorksheet(String sheetName) throws OseeCoreException { + System.out.println("Processing Sheet " + sheetName); + this.sheetName = sheetName; + if (sheetName.equals(OrcsWriterUtil.CREATE_SHEET_NAME)) { + createSheet = new OrcsWriterSheetProcessorForCreateUpdate(collector, result, true); + return; + } else if (sheetName.equals(OrcsWriterUtil.UPDATE_SHEET_NAME)) { + updateSheet = new OrcsWriterSheetProcessorForCreateUpdate(collector, result, false); + return; + } else if (sheetName.equals(OrcsWriterUtil.INSTRUCTIONS_AND_SETTINGS_SHEET_NAME)) { + settingsSheet = new OrcsWriterSheetProcessorForSettings(collector, result); + return; + } else if (sheetName.equals(OrcsWriterUtil.DELETE_SHEET_NAME)) { + deleteSheet = new OrcsWriterSheetProcessorForDelete(collector, result); + return; + } + } + + @Override + public void processCommentRow(String[] row) { + // do nothing + } + + @Override + public void processEmptyRow() { + // do nothing + } + + @Override + public void processHeaderRow(String[] headerRow) { + if (isCreateSheet()) { + createSheet.processHeaderRow(headerRow); + } else if (isUpdateSheet()) { + updateSheet.processHeaderRow(headerRow); + } else if (isDeleteSheet()) { + deleteSheet.processHeaderRow(headerRow); + } + } + + private boolean isCreateSheet() { + return sheetName.equals(OrcsWriterUtil.CREATE_SHEET_NAME); + } + + private boolean isDeleteSheet() { + return sheetName.equals(OrcsWriterUtil.DELETE_SHEET_NAME); + } + + private boolean isUpdateSheet() { + return sheetName.equals(OrcsWriterUtil.UPDATE_SHEET_NAME); + } + + private boolean isSettingsSheet() { + return sheetName.equals(OrcsWriterUtil.INSTRUCTIONS_AND_SETTINGS_SHEET_NAME); + } + + @Override + public void processRow(String[] row) throws OseeCoreException { + if (isCreateSheet()) { + processCreateSheetRow(row); + } else if (isUpdateSheet()) { + processUpdateSheetRow(row); + } else if (isSettingsSheet()) { + settingsSheet.processRow(row); + } else if (isDeleteSheet()) { + processDeleteSheetRow(row); + } + } + + private void processDeleteSheetRow(String[] row) { + deleteSheet.processRow(row); + } + + private void processUpdateSheetRow(String[] row) { + updateSheet.processRow(row); + } + + private void processCreateSheetRow(String[] row) { + createSheet.processRow(row); + } + + @Override + public void reachedEndOfWorksheet() { + // do nothing + } + + } + + public OwCollector getCollector() { + return collector; + } +} diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterFactory.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterFactory.java new file mode 100644 index 00000000000..05e2692db16 --- /dev/null +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterFactory.java @@ -0,0 +1,140 @@ +/******************************************************************************* + * Copyright (c) 2015 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.orcs.rest.internal.writer; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifact; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactToken; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwAttribute; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwAttributeType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwBranch; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwCollector; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwRelation; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwRelationType; + +/** + * @author Donald G. Dunne + */ +public class OrcsWriterFactory { + + private final Pattern relTypePattern = Pattern.compile("\\[(.*)\\]-\\[(.*)\\]-\\[(.*)\\]-\\[(.*)\\]"); + private final Pattern nameIdPattern = Pattern.compile("\\[(.*)\\]-\\[(.*)\\]"); + private final Map<Long, OwArtifactType> uuidToArtType = new HashMap<>(); + private final Map<Long, OwArtifactToken> uuidToArtToken = new HashMap<>(); + private final OwCollector collector; + + public OrcsWriterFactory(OwCollector collector) { + this.collector = collector; + } + + public OwArtifactToken getOrCreateToken(String value) { + OwArtifactToken token = null; + Matcher matcher = nameIdPattern.matcher(value); + if (matcher.find()) { + Long uuid = Long.valueOf(matcher.group(2)); + token = uuidToArtToken.get(uuid); + if (token == null) { + token = new OwArtifactToken(); + token.setName(matcher.group(1)); + token.setUuid(uuid); + token.setData(value); + collector.getArtTokens().add(token); + uuidToArtToken.put(uuid, token); + } + } + return token; + } + + public OwArtifactType getOrCreateArtifactType(String value) { + OwArtifactType artType = null; + Matcher matcher = nameIdPattern.matcher(value); + if (matcher.find()) { + Long uuid = Long.valueOf(matcher.group(2)); + artType = uuidToArtType.get(uuid); + if (artType == null) { + artType = new OwArtifactType(); + artType.setName(matcher.group(1)); + artType.setUuid(uuid); + artType.setData(value); + collector.getArtTypes().add(artType); + uuidToArtType.put(uuid, artType); + } + } + return artType; + } + + public OwAttribute getOrCreateAttribute(OwArtifact artifact, OwAttributeType attrType) { + OwAttribute attr = null; + for (OwAttribute fAttr : artifact.getAttributes()) { + if (fAttr.getType().getUuid() > 0L && fAttr.getType().getUuid().equals(attrType.getUuid())) { + attr = fAttr; + break; + } else if (fAttr.getType().getName().equals(attrType.getName())) { + attr = fAttr; + break; + } + } + if (attr == null) { + attr = new OwAttribute(); + attr.setType(attrType); + artifact.getAttributes().add(attr); + } + return attr; + } + + public OwRelation createRelationType(OwRelationType relType, String value) { + OwArtifactToken token = getOrCreateToken(value); + OwRelation relation = new OwRelation(); + relation.setData(value); + relation.setArtToken(token); + relation.setType(relType); + return relation; + } + + public void processRelationType(OwRelationType relType, String value) { + relType.setData(value); + Matcher matcher = relTypePattern.matcher(value); + if (matcher.find()) { + relType.setName(matcher.group(1)); + relType.setSideName(matcher.group(2)); + relType.setSideA(matcher.group(3).contains("Side A")); + relType.setUuid(Long.valueOf(matcher.group(4))); + } + } + + public void processAttributeType(OwAttributeType attrType, String value) { + attrType.setData(value); + Matcher matcher = nameIdPattern.matcher(value); + if (matcher.find()) { + attrType.setName(matcher.group(1)); + attrType.setUuid(Long.valueOf(matcher.group(2))); + } + // otherwise, assume the value is the attribute name + else { + attrType.setName(value); + } + } + + public OwBranch getOrCreateBranchToken(String value) { + OwBranch branch = new OwBranch(); + Matcher matcher = nameIdPattern.matcher(value); + if (matcher.find()) { + branch.setName(matcher.group(1)); + branch.setUuid(Long.valueOf(matcher.group(2))); + } + return branch; + } + +} diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterSheetProcessorForCreateUpdate.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterSheetProcessorForCreateUpdate.java new file mode 100644 index 00000000000..60111b50593 --- /dev/null +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterSheetProcessorForCreateUpdate.java @@ -0,0 +1,233 @@ +/******************************************************************************* + * Copyright (c) 2015 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.orcs.rest.internal.writer; + +import java.util.HashMap; +import java.util.Map; +import org.eclipse.osee.framework.core.enums.CoreAttributeTypes; +import org.eclipse.osee.framework.core.util.XResultData; +import org.eclipse.osee.framework.jdk.core.type.OseeArgumentException; +import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.type.OseeStateException; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifact; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactToken; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwAttribute; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwAttributeType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwCollector; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwRelation; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwRelationType; + +/** + * @author Donald G. Dunne + */ +public class OrcsWriterSheetProcessorForCreateUpdate implements RowProcessor { + + private final OwCollector collector; + private final Map<Integer, OwAttributeType> columnToAttributeType = new HashMap<>(); + private final Map<Integer, OwRelationType> columnToRelationType = new HashMap<>(); + private Integer artTokenColumn = null, nameColumn = null; + private int rowCount = 0; + private final OrcsWriterFactory factory; + private final boolean createSheet; + + public OrcsWriterSheetProcessorForCreateUpdate(OwCollector collector, XResultData result, boolean createSheet) { + this.collector = collector; + this.createSheet = createSheet; + this.factory = new OrcsWriterFactory(collector); + } + + @Override + public void detectedRowAndColumnCounts(int rowCount, int columnCount) { + // do nothing + } + + @Override + public void foundStartOfWorksheet(String sheetName) throws OseeCoreException { + // do nothing + } + + @Override + public void processCommentRow(String[] row) { + // do nothing + } + + @Override + public void processEmptyRow() { + // do nothing + } + + boolean isAttributeColumn(int x) { + return columnToAttributeType.containsKey(x); + } + + boolean isRelationColumn(int x) { + return columnToRelationType.containsKey(x); + } + + @Override + public void processHeaderRow(String[] headerRow) { + rowCount++; + for (int colCount = 0; colCount < headerRow.length; colCount++) { + String value = headerRow[colCount]; + if (value != null) { + if (value.toLowerCase().equals("name")) { + if (nameColumn != null) { + throw new OseeArgumentException("Can't have multiple Name columns on %s sheet", getSheetName()); + } + nameColumn = colCount; + } else if (value.toLowerCase().equals("attribute")) { + OwAttributeType attrType = new OwAttributeType(); + attrType.setData("Column " + colCount); + columnToAttributeType.put(colCount, attrType); + collector.getAttrTypes().add(attrType); + } else if (value.toLowerCase().equals("relation")) { + OwRelationType relType = new OwRelationType(); + relType.setData("Column " + colCount); + columnToRelationType.put(colCount, relType); + collector.getRelTypes().add(relType); + } else if (value.toLowerCase().startsWith("new art token")) { + if (artTokenColumn != null) { + throw new OseeArgumentException("Can't have multiple \"New Art Token\" columns on %s sheet", + getSheetName()); + } + artTokenColumn = colCount; + } + } + } + if (isCreateSheet() && nameColumn == null) { + throw new OseeArgumentException("Name column must be present on %s sheet", getSheetName()); + } + if (isCreateSheet() && artTokenColumn == null) { + throw new OseeArgumentException("Artifact Token column must be present on %s sheet", getSheetName()); + } + if (!isCreateSheet() && artTokenColumn != null) { + throw new OseeArgumentException("Artifact Token column should NOT be present on %s sheet", getSheetName()); + } + } + + private boolean isCreateSheet() { + return createSheet; + } + + private String getSheetName() { + return createSheet ? "CREATE" : "UPDATE"; + } + + @Override + public void processRow(String[] row) throws OseeCoreException { + rowCount++; + OwArtifact artifact = new OwArtifact(); + artifact.setData("Row " + rowCount); + if (rowCount == 2) { + for (int colCount = 0; colCount < row.length; colCount++) { + if (isAttributeColumn(colCount)) { + OwAttributeType attrType = columnToAttributeType.get(colCount); + String value = row[colCount]; + factory.processAttributeType(attrType, value); + } else if (isRelationColumn(colCount)) { + OwRelationType relType = columnToRelationType.get(colCount); + String value = row[colCount]; + factory.processRelationType(relType, value); + } + } + } else if (rowCount > 2) { + if (createSheet) { + collector.getCreate().add(artifact); + } else { + collector.getUpdate().add(artifact); + } + for (int colCount = 0; colCount < row.length; colCount++) { + if (colCount == 0) { + String value = row[0]; + // First column of create sheet is artifact type token + if (createSheet) { + if (!Strings.isValid(value)) { + throw new OseeArgumentException( + "First column must contain artifact type. row number on CREATE sheet" + rowCount); + } else { + OwArtifactType artType = factory.getOrCreateArtifactType(value); + if (artType == null) { + throw new OseeArgumentException( + "Invalid Artifact Type row %d value [%s]; expected [name]-[uuid] on CREATE sheet", rowCount, + value); + } + artifact.setType(artType); + } + } + // Else, first column of update sheet is artifact token + else { + if (!Strings.isValid(value)) { + throw new OseeArgumentException( + "First column must contain artifact token. row number %d on UPDATE sheet", rowCount); + } else { + OwArtifactToken artifactToken = factory.getOrCreateToken(value); + if (artifactToken == null) { + throw new OseeArgumentException( + "Invalid Artifact Token row %d value [%s]; expected [name]-[uuid] on UPDATE sheet", rowCount, + value); + } + artifact.setUuid(artifactToken.getUuid()); + } + } + } + if (isCreateSheet() && artTokenColumn == colCount) { + String value = row[colCount]; + if (Strings.isValid(value)) { + OwArtifactToken token = factory.getOrCreateToken(value); + if (token.getUuid() > 0L) { + artifact.setUuid(token.getUuid()); + } else { + throw new OseeStateException("Unexpected string [%s] at %s; expected [name]-[uuid] on sheet", + value, OrcsWriterUtil.getRowColumnStr(colCount, colCount), getSheetName()); + } + } + } + if (nameColumn == colCount) { + String value = row[colCount]; + if (Strings.isValid(value)) { + artifact.setName(value); + } else { + throw new OseeStateException("Unexpected Name [%s] at %s on %s sheet", value, + OrcsWriterUtil.getRowColumnStr(colCount, colCount), getSheetName()); + } + } + if (isAttributeColumn(colCount)) { + OwAttributeType attrType = columnToAttributeType.get(colCount); + if (attrType.getName().equals(CoreAttributeTypes.Name.getName())) { + throw new OseeStateException("Name cannot also exist as attribute column at %s on %s sheet", + OrcsWriterUtil.getRowColumnStr(rowCount, colCount), getSheetName()); + } + String value = row[colCount]; + OwAttribute attr = factory.getOrCreateAttribute(artifact, attrType); + attr.getValues().add(value); + attr.setData(OrcsWriterUtil.getData(rowCount, colCount, attr.getData())); + } else if (isRelationColumn(colCount)) { + OwRelationType relType = columnToRelationType.get(colCount); + String value = row[colCount]; + if (Strings.isValid(value)) { + OwRelation relation = factory.createRelationType(relType, value); + relation.setData(OrcsWriterUtil.getData(rowCount, colCount, relation.getData())); + artifact.getRelations().add(relation); + } + } + } + } + } + + @Override + public void reachedEndOfWorksheet() { + // do nothing + } + +} diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterSheetProcessorForDelete.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterSheetProcessorForDelete.java new file mode 100644 index 00000000000..9f51472d1fb --- /dev/null +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterSheetProcessorForDelete.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * Copyright (c) 2015 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.orcs.rest.internal.writer; + +import org.eclipse.osee.framework.core.util.XResultData; +import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactToken; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwCollector; + +/** + * @author Donald G. Dunne + */ +public class OrcsWriterSheetProcessorForDelete implements RowProcessor { + + private final OwCollector collector; + private int rowCount = 0; + private final OrcsWriterFactory factory; + private final XResultData result; + + public OrcsWriterSheetProcessorForDelete(OwCollector collector, XResultData result) { + this.collector = collector; + this.result = result; + this.factory = new OrcsWriterFactory(collector); + } + + @Override + public void detectedRowAndColumnCounts(int rowCount, int columnCount) { + // do nothing + } + + @Override + public void foundStartOfWorksheet(String sheetName) throws OseeCoreException { + // do nothing + } + + @Override + public void processCommentRow(String[] row) { + // do nothing + } + + @Override + public void processEmptyRow() { + // do nothing + } + + @Override + public void processHeaderRow(String[] headerRow) { + rowCount++; + if (headerRow.length > 1) { + result.warning("More than 1 column found in DELETE sheet. Only column 1 is processed"); + } + } + + @Override + public void processRow(String[] row) throws OseeCoreException { + rowCount++; + OwArtifactToken artifact = null; + String value = row[0]; + if (Strings.isNumeric(value)) { + artifact = new OwArtifactToken(); + artifact.setUuid(Long.valueOf(value)); + artifact.setName("unknown"); + } + if (Strings.isValid(value)) { + artifact = factory.getOrCreateToken(value); + } + if (artifact != null) { + artifact.setData("Row " + rowCount); + collector.getDelete().add(artifact); + } + } + + @Override + public void reachedEndOfWorksheet() { + // do nothing + } + +} diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterSheetProcessorForSettings.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterSheetProcessorForSettings.java new file mode 100644 index 00000000000..72847369854 --- /dev/null +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterSheetProcessorForSettings.java @@ -0,0 +1,92 @@ +/******************************************************************************* + * Copyright (c) 2015 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.orcs.rest.internal.writer; + +import org.eclipse.osee.framework.core.util.XResultData; +import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; +import org.eclipse.osee.framework.jdk.core.util.Strings; +import org.eclipse.osee.framework.jdk.core.util.io.xml.RowProcessor; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwBranch; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwCollector; + +/** + * @author Donald G. Dunne + */ +public class OrcsWriterSheetProcessorForSettings implements RowProcessor { + + private final OwCollector collector; + private int rowCount = 0; + private final OrcsWriterFactory factory; + + public OrcsWriterSheetProcessorForSettings(OwCollector collector, XResultData result) { + this.collector = collector; + this.factory = new OrcsWriterFactory(collector); + } + + @Override + public void detectedRowAndColumnCounts(int rowCount, int columnCount) { + // do nothing + } + + @Override + public void foundStartOfWorksheet(String sheetName) throws OseeCoreException { + // do nothing + } + + @Override + public void processCommentRow(String[] row) { + // do nothing + } + + @Override + public void processEmptyRow() { + // do nothing + } + + @Override + public void processHeaderRow(String[] headerRow) { + // do nothing + } + + @Override + public void processRow(String[] row) throws OseeCoreException { + rowCount++; + for (int colCount = 0; colCount < row.length; colCount++) { + if (colCount == 0) { + String key = row[colCount]; + if (key.equals(OrcsWriterUtil.BRANCH_TOKEN_SETTING)) { + String branchTokenStr = row[1]; + if (Strings.isValid(branchTokenStr)) { + OwBranch branchToken = factory.getOrCreateBranchToken(branchTokenStr); + collector.setBranch(branchToken); + branchToken.setData(OrcsWriterUtil.getData(rowCount, colCount, branchTokenStr)); + } + } else if (key.equals(OrcsWriterUtil.AS_USER_ID_SETTING)) { + String userId = row[1]; + if (Strings.isValid(userId)) { + collector.setAsUserId(userId); + } + } else if (key.equals(OrcsWriterUtil.PERSIST_COMMENT_SETTING)) { + String persistComment = row[1]; + if (Strings.isValid(persistComment)) { + collector.setPersistComment(persistComment); + } + } + } + } + } + + @Override + public void reachedEndOfWorksheet() { + // do nothing + } + +} diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterStreamingOutput.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterStreamingOutput.java index e38bf40e1a1..48a6eed5a66 100644 --- a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterStreamingOutput.java +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterStreamingOutput.java @@ -15,7 +15,7 @@ import java.io.OutputStreamWriter; import java.io.Writer; import javax.ws.rs.core.StreamingOutput; import org.eclipse.osee.orcs.OrcsApi; -import org.eclipse.osee.orcs.writer.model.reader.OwCollector; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwCollector; /** * @author Donald G. Dunne diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterUtil.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterUtil.java new file mode 100644 index 00000000000..c8ec7b0432d --- /dev/null +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterUtil.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2015 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.orcs.rest.internal.writer; + +/** + * @author Donald G. Dunne + */ +public class OrcsWriterUtil { + + public static final String PERSIST_COMMENT_SETTING = "PERSIST COMMENT"; + public static final String AS_USER_ID_SETTING = "AS USER ID"; + public static final String BRANCH_TOKEN_SETTING = "BRANCH TOKEN"; + public static final String INSTRUCTIONS_AND_SETTINGS_SHEET_NAME = "Instructions and Settings"; + public static final String CREATE_SHEET_NAME = "CREATE"; + public static final String DELETE_SHEET_NAME = "DELETE"; + public static final String UPDATE_SHEET_NAME = "UPDATE"; + + private OrcsWriterUtil() { + // Utility Class + } + + public static String getData(int rowCount, int colCount, String data) { + if (data != null) { + data += ", "; + } + data += getRowColumnStr(rowCount, colCount); + return data; + } + + public static String getRowColumnStr(int rowCount, int colCount) { + return "row " + rowCount + ", column " + (colCount + 1); + } + +} diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterWorkbookGenerator.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterWorkbookGenerator.java index 747765b7c5f..bb498fb2cef 100644 --- a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterWorkbookGenerator.java +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OrcsWriterWorkbookGenerator.java @@ -22,14 +22,12 @@ import org.eclipse.osee.framework.jdk.core.util.Lib; import org.eclipse.osee.framework.jdk.core.util.io.xml.ExcelXmlWriter; import org.eclipse.osee.framework.jdk.core.util.io.xml.ISheetWriter; import org.eclipse.osee.orcs.OrcsApi; -import org.eclipse.osee.orcs.writer.OrcsWriterUtil; -import org.eclipse.osee.orcs.writer.model.reader.OwArtifactToken; -import org.eclipse.osee.orcs.writer.model.reader.OwArtifactType; -import org.eclipse.osee.orcs.writer.model.reader.OwAttributeType; -import org.eclipse.osee.orcs.writer.model.reader.OwBranch; -import org.eclipse.osee.orcs.writer.model.reader.OwCollector; -import org.eclipse.osee.orcs.writer.model.reader.OwFactory; -import org.eclipse.osee.orcs.writer.model.reader.OwRelationType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactToken; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwAttributeType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwBranch; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwCollector; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwRelationType; /** * @author Donald G. Dunne diff --git a/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OwFactory.java b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OwFactory.java new file mode 100644 index 00000000000..5eb01a3f0ca --- /dev/null +++ b/plugins/org.eclipse.osee.orcs.rest/src/org/eclipse/osee/orcs/rest/internal/writer/OwFactory.java @@ -0,0 +1,115 @@ +/******************************************************************************* + * Copyright (c) 2015 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.orcs.rest.internal.writer; + +/** + * Donald G. Dunne + */ +import org.eclipse.osee.framework.core.data.IArtifactToken; +import org.eclipse.osee.framework.core.data.IArtifactType; +import org.eclipse.osee.framework.core.data.IAttributeType; +import org.eclipse.osee.framework.core.data.IOseeBranch; +import org.eclipse.osee.framework.core.data.IRelationType; +import org.eclipse.osee.framework.core.data.IRelationTypeSide; +import org.eclipse.osee.framework.jdk.core.util.Lib; +import org.eclipse.osee.orcs.OrcsApi; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifact; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactToken; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwArtifactType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwAttribute; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwAttributeType; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwBranch; +import org.eclipse.osee.orcs.rest.model.writer.reader.OwRelationType; + +public class OwFactory { + + public static OwArtifactType createArtifactType(IArtifactType artType) { + String typeStr = String.format("[%s]-[%d]", artType.getName(), artType.getGuid()); + OwArtifactType type = new OwArtifactType(); + type.setUuid(artType.getGuid()); + type.setName(artType.getName()); + type.setData(typeStr); + return type; + } + + public static OwAttributeType createAttributeType(IAttributeType attrType) { + String typeStr = String.format("[%s]-[%d]", attrType.getName(), attrType.getGuid()); + OwAttributeType type = new OwAttributeType(); + type.setUuid(attrType.getGuid()); + type.setName(attrType.getName()); + type.setData(typeStr); + return type; + } + + public static OwArtifactToken createArtifactToken(IArtifactToken token) { + return createArtifactToken(token.getName(), token.getUuid()); + } + + public static OwArtifactToken createArtifactToken(String name, long uuid) { + String tokenStr = String.format("[%s]-[%d]", name, uuid); + OwArtifactToken owToken = new OwArtifactToken(); + owToken.setUuid(uuid); + owToken.setName(name); + owToken.setData(tokenStr); + return owToken; + } + + public static OwRelationType createRelationType(IRelationType relType, String sideName, boolean sideA) { + String sideData = + String.format("[%s]-[%s]-[Side %s]-[%d]", relType.getName(), sideName, sideA ? "A" : "B", relType.getGuid()); + OwRelationType owType = new OwRelationType(); + owType.setUuid(relType.getGuid()); + owType.setName(relType.getName()); + owType.setData(sideData); + owType.setSideA(sideA); + return owType; + } + + public static OwRelationType createRelationType(OrcsApi orcsApi, IRelationTypeSide type) { + String sideAName = orcsApi.getOrcsTypes().getRelationTypes().getSideAName(type); + OwRelationType owType = OwFactory.createRelationType(type, sideAName, true); + return owType; + } + + public static OwArtifact createArtifact(IArtifactType artifactType, String name) { + return createArtifact(artifactType, name, null); + } + + public static OwArtifact createArtifact(IArtifactType artifactType, String name, Long uuid) { + OwArtifact artifact = new OwArtifact(); + artifact.setType(OwFactory.createArtifactType(artifactType)); + if (uuid == null) { + uuid = Lib.generateArtifactIdAsInt(); + } + artifact.setUuid(uuid); + artifact.setName(name); + return artifact; + } + + public static OwAttribute createAttribute(OwArtifact artifact, IAttributeType attrType, Object... values) { + OwAttribute attribute = new OwAttribute(); + attribute.setType(OwFactory.createAttributeType(attrType)); + for (Object obj : values) { + attribute.getValues().add(obj); + } + artifact.getAttributes().add(attribute); + return attribute; + } + + public static OwBranch createBranchToken(IOseeBranch branch) { + String tokenStr = String.format("[%s]-[%d]", branch.getName(), branch.getUuid()); + OwBranch owBranch = new OwBranch(); + owBranch.setData(tokenStr); + owBranch.setName(branch.getName()); + owBranch.setUuid(branch.getUuid()); + return owBranch; + } +} |