blob: 05e2692db16276b29cb7926b68351f691e7f1ca3 [file] [log] [blame]
/*******************************************************************************
* 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;
}
}