| /******************************************************************************* |
| * 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; |
| } |
| |
| } |