Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
michbarsinai committed Aug 14, 2017
2 parents b1702a8 + 65ec0f1 commit f5a298b
Show file tree
Hide file tree
Showing 42 changed files with 1,017 additions and 560 deletions.
2 changes: 1 addition & 1 deletion DataTagsLib/nbproject/configs/Compile_test_FC.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
$label=Compile test FC
main.class=edu.harvard.iq.datatags.mains.FlowChartCompiling
main.class=edu.harvard.iq.datatags.mains.DecisionGraphCompiling
2 changes: 1 addition & 1 deletion DataTagsLib/nbproject/private/configs/CLI-hello.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
application.args=policy-models/dg-large-modular
application.args=policy-models/test
work.dir=WORK
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
application.args=dtl/0.5t/definitions.tags dtl/0.5t/questionnaire.flow
application.args=/Users/michael/Documents/PhD/IQSS/Data-Tags/SubProjects/Force11/openAccessPublishingFlowchart
work.dir=WORK
2 changes: 1 addition & 1 deletion DataTagsLib/nbproject/private/private.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,5 @@ javadoc.preview=true
<<<<<<< HEAD
user.properties.file=/Users/michael/Library/Application Support/NetBeans/8.1/build.properties
=======
user.properties.file=/Users/michael/Library/Application Support/NetBeans/8.2/build.properties
user.properties.file=C:\\Users\\user\\AppData\\Roaming\\NetBeans\\8.2\\build.properties
>>>>>>> 3e85a56f4c480fd33c660bb30999ba6bf4a8e64b
11 changes: 8 additions & 3 deletions DataTagsLib/nbproject/private/private.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,15 @@
<file>file:/C:/Users/user/Desktop/DataTagging/DataTaggingLibrary%20-%20import/DataTaggingLibrary/DataTagsLib/src/edu/harvard/iq/datatags/parser/decisiongraph/CompilationUnit.java</file>
</group>
<group name="DataTags">
<file>file:/Users/michael/Documents/PhD/IQSS/Data-Tags/DataTaggingLibrary/DataTagsLib/src/edu/harvard/iq/datatags/visualizers/graphviz/GraphvizDecisionGraphClusteredVisualizer.java</file>
<file>file:/Users/michael/Documents/PhD/IQSS/Data-Tags/DataTaggingLibrary/DataTagsLib/src/edu/harvard/iq/datatags/model/graphs/DecisionGraph.java</file>
<file>file:/Users/michael/Documents/PhD/IQSS/Data-Tags/DataTaggingLibrary/DataTagsLib/src/edu/harvard/iq/datatags/model/types/AtomicSlot.java</file>
<file>file:/Users/michael/Documents/PhD/IQSS/Data-Tags/DataTaggingLibrary/DataTagsLib/test/edu/harvard/iq/datatags/runtime/ChartRunningTest.java</file>
<file>file:/Users/michael/Documents/PhD/IQSS/Data-Tags/DataTaggingLibrary/DataTagsLib/src/edu/harvard/iq/datatags/model/values/AtomicValue.java</file>
<file>file:/Users/michael/Documents/PhD/IQSS/Data-Tags/DataTaggingLibrary/DataTagsLib/src/edu/harvard/iq/datatags/parser/decisiongraph/CompilationUnit.java</file>
<file>file:/Users/michael/Documents/PhD/IQSS/Data-Tags/DataTaggingLibrary/DataTagsLib/src/edu/harvard/iq/datatags/parser/decisiongraph/DecisionGraphCompiler.java</file>
<file>file:/Users/michael/Documents/PhD/IQSS/Data-Tags/DataTaggingLibrary/DataTagsLib/src/edu/harvard/iq/datatags/visualizers/graphviz/AbstractGraphvizDecisionGraphVisualizer.java</file>
<file>file:/Users/michael/Documents/PhD/IQSS/Data-Tags/DataTaggingLibrary/DataTagsLib/src/edu/harvard/iq/datatags/visualizers/graphviz/GraphvizVisualizer.java</file>
<file>file:/Users/michael/Documents/PhD/IQSS/Data-Tags/DataTaggingLibrary/DataTagsLib/src/edu/harvard/iq/datatags/model/values/AggregateValue.java</file>
<file>file:/Users/michael/Documents/PhD/IQSS/Data-Tags/DataTaggingLibrary/DataTagsLib/test/edu/harvard/iq/datatags/parser/decisiongraph/DecisionGraphParseResultTest.java</file>
<file>file:/Users/michael/Documents/PhD/IQSS/Data-Tags/DataTaggingLibrary/DataTagsLib/src/edu/harvard/iq/datatags/model/values/CompoundValue.java</file>
</group>
</open-files>
</project-private>
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import edu.harvard.iq.datatags.model.types.SlotType;
import edu.harvard.iq.datatags.model.types.ToDoSlot;
import edu.harvard.iq.datatags.parser.decisiongraph.AstNodeIdProvider;
import edu.harvard.iq.datatags.parser.decisiongraph.CompilationUnit;
import edu.harvard.iq.datatags.runtime.exceptions.DataTagsRuntimeException;
import static edu.harvard.iq.datatags.util.StringHelper.nonEmpty;
import java.io.BufferedReader;
Expand All @@ -31,6 +30,7 @@
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
Expand Down Expand Up @@ -253,22 +253,22 @@ public void visitImpl(AskNode nd) throws DataTagsRuntimeException {
.append("\n")
);
}
createNodeLocalizationFile(nodesDir, nd.getId(), sb.toString());
createNodeLocalizationFile(nodesDir, nd, sb.toString());
}

@Override
public void visitImpl(SectionNode nd) throws DataTagsRuntimeException {
createNodeLocalizationFile(nodesDir, nd.getId(), nd.getTitle());
createNodeLocalizationFile(nodesDir, nd, nd.getTitle());
}

@Override
public void visitImpl(RejectNode nd) throws DataTagsRuntimeException {
createNodeLocalizationFile(nodesDir, nd.getId(), nd.getReason());
createNodeLocalizationFile(nodesDir, nd, nd.getReason());
}

@Override
public void visitImpl(ToDoNode nd) throws DataTagsRuntimeException {
createNodeLocalizationFile(nodesDir, nd.getId(), nd.getTodoText());
createNodeLocalizationFile(nodesDir, nd, nd.getTodoText());
}

@Override
Expand All @@ -281,32 +281,34 @@ public void visitImpl(CallNode nd) throws DataTagsRuntimeException {}
public void visitImpl(EndNode nd) throws DataTagsRuntimeException {}
};

PolicyModelData metaData = rnr.getModel().getMetadata();

rnr.getModel().getDecisionGraph().nodes().forEach( nd -> {
if ( AstNodeIdProvider.isAutoId(nd.getId()) ) return;
if ( ! isLocalNode(nd.getId(), metaData) ) return;
nd.accept(writer);
});

rnr.println("..Done");
}

private void createNodeLocalizationFile( Path nodesDir, String nodeId, String content ) {
String[] comps = nodeId.split(">");
private void createNodeLocalizationFile( Path nodesDir, Node node, String content) {
Path relativePath = Paths.get(node.getId().substring(1, node.getId().indexOf("]")));
//delete the .dg from file name
String fileName = relativePath.toString();
fileName = fileName.endsWith(".dg") ? fileName.substring(0, fileName.length() - 3) : fileName;
relativePath = Paths.get(fileName);

Path nodeDir;
if ( comps.length == 1 ) {
nodeDir = nodesDir.resolve(comps[0] + ".md");
} else {
Path secFol = nodesDir.resolve(comps[0]);
if ( ! Files.exists(secFol) ) {
try {
Files.createDirectories(secFol);
} catch (IOException ex) {
Logger.getLogger(CreateLocalizationCommand.class.getName()).log(Level.SEVERE, "Error creating directory for node localizatoin", ex);
}
Path secFol = nodesDir.resolve(relativePath);
if ( ! Files.exists(secFol) ) {
try {
Files.createDirectories(secFol);
} catch (IOException ex) {
Logger.getLogger(CreateLocalizationCommand.class.getName()).log(Level.SEVERE, "Error creating directory for node localizatoin", ex);
}
nodeDir = secFol.resolve(comps[1] + ".md");
}

String nodeName = node.getId().substring(node.getId().indexOf("]")+1, node.getId().length());
nodeDir = secFol.resolve(nodeName + ".md");
if ( nodeDir != null ) {
createFileWithContent(nodeDir, content);
}
Expand Down Expand Up @@ -378,27 +380,5 @@ List<String> processSingleLine(String in, PolicyModelData data) {
}
return Collections.singletonList(out);
}

/**
* Find which nodes are local, that is reside within the same directory as the
* main decision graph.
* @param nodeId The id of the node we test.
* @param md the model metadata (needed for the compilation units)
* @return {@code true} iff the node came from a local file.
*/
private boolean isLocalNode( String nodeId, PolicyModelData md ) {
String[] comps = nodeId.split(">");
if ( comps.length == 1 ) return true;
CompilationUnit compilationUnit = md.getCompilationUnits().get(comps[0]);

if ( compilationUnit != null ) {
Path cuPath = compilationUnit.getSourcePath();
return cuPath.startsWith(md.getModelDirectoryPath());

} else {
System.err.println("Nonexistant " + comps[0]);
System.err.println( md.getCompilationUnits().keySet());
return false;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Set;
import java.util.TreeSet;
import static java.util.stream.Collectors.toList;

/**
Expand All @@ -33,6 +35,8 @@
*/
public class NewModelCommand extends AbstractCliCommand {

static Set<Character> ALLOWD_FILENAME_CHARACTERS = new TreeSet<>(Arrays.asList('-','_','(',')'));

private PolicyModelData data;

private final Pattern fieldDetector = Pattern.compile("\\$\\{[_A-Z]*\\}");
Expand Down Expand Up @@ -68,7 +72,9 @@ public void execute(CliRunner rnr, List<String> args) throws Exception {
if ( hasFlag("q", args) ) {
autoFillModel();
} else {
interactiveFillModel(rnr);
if ( ! interactiveFillModel(rnr) ) {
return;
}
}

rnr.print("Creating model at " + data.getMetadataFile().getParent().toAbsolutePath() + "...");
Expand Down Expand Up @@ -149,13 +155,31 @@ List<String> processSingleLine(String in) {
return Collections.singletonList(out);
}

private void interactiveFillModel(CliRunner rnr) throws IOException {
private boolean interactiveFillModel(CliRunner rnr) throws IOException {
data.setTitle(rnr.readLineWithDefault("Model title: ", "Policy Model"));

Path modelFolder = Paths.get("PolicyModel");
String modelFolderName = sanitizeName(data.getTitle());
if (modelFolderName.length() == 0) {
modelFolderName = "PolicyModel";
}

String modelPath = rnr.readLineWithDefault("Model Path:", Paths.get(".").toAbsolutePath()
.getParent().resolve(modelFolderName).toString());

if ( modelPath.startsWith("~/") ) {
modelPath = System.getProperty("user.home") + "/" + modelPath.substring(2);
}

Path modelFolder = Paths.get(modelPath);

if ( ! Files.exists(modelFolder.getParent()) ) {
rnr.printWarning("Parent directory '%s' does not exist. Please validate the path typed is correct.", modelPath);
return false;
}

int i=1;
while ( Files.exists(modelFolder) ) {
modelFolder = Paths.get("PolicyModel-" + i);
modelFolder = Paths.get(modelPath + "-" + i);
i++;
}
data.setMetadataFile( modelFolder.resolve("policy-model.xml") );
Expand All @@ -176,7 +200,7 @@ private void interactiveFillModel(CliRunner rnr) throws IOException {
} else if ( ans.equals("y") ) {
boolean go2 = true;
while (go2) {
ans = rnr.readLineWithDefault("Person or Group? (p/g): ", "y");
ans = rnr.readLineWithDefault("Person or Group? (p/g): ", "p");
if ( ans.equals("p") ) {
PersonAuthorData pad = new PersonAuthorData();
pad.setName( rnr.readLine("Name: ") );
Expand All @@ -196,7 +220,7 @@ private void interactiveFillModel(CliRunner rnr) throws IOException {
}
}
}

return true;
}

private void autoFillModel() {
Expand All @@ -219,6 +243,22 @@ private void autoFillModel() {
data.setPolicySpacePath( data.getMetadataFile().resolveSibling("policy-space.ps") );
data.setRootTypeName("DataTags");
}

String sanitizeName(String name) {
StringBuilder out = new StringBuilder(name.length());
if ( name.length() > 64 ) {
name = name.substring(0, 64);
}

for ( char c : name.toCharArray() ) {
out.append(
(Character.isAlphabetic(c) || Character.isDigit(c) || ALLOWD_FILENAME_CHARACTERS.contains(c))
? c : "-"
);
}

return out.toString();
}
}

class AuthorToXml implements AuthorData.Visitor<List<String>> {
Expand Down Expand Up @@ -263,7 +303,7 @@ public List<String> visit(GroupAuthorData g) {

return res;
}



}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.awt.Desktop;
import java.io.ByteArrayOutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.nio.file.Path;
import java.util.List;
import java.util.Set;
Expand Down Expand Up @@ -54,6 +55,7 @@ public void executeWithDot(Path pathToDot, CliRunner rnr, List<String> args) thr
viz.visualize(outputToGraphviz);
}


ProcessOutputDumper dump = new ProcessOutputDumper( gv.getInputStream(), outputPath);
ByteArrayOutputStream errorStrm = new ByteArrayOutputStream();
ProcessOutputDumper errDump = new ProcessOutputDumper(gv.getErrorStream(), errorStrm);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package edu.harvard.iq.datatags.externaltexts;

import edu.harvard.iq.datatags.model.types.SlotType;
import edu.harvard.iq.datatags.model.values.TagValue;
import java.util.Arrays;
import java.util.EnumMap;
import java.util.HashMap;
Expand Down Expand Up @@ -29,7 +31,9 @@ public class Localization {

private final Map<String, String> nodeText = new HashMap<>();

private final Map<List<String>,String> policySpaceEntityText = new HashMap<>();
private final Map<SlotType, String> slotsText = new HashMap<>();

private final Map<TagValue, String> slotValuesText = new HashMap<>();

/**
* A map of the readme files this localization can
Expand All @@ -44,10 +48,12 @@ public Localization(String language) {
* Removes versions of localization data from {@code this}, based on the passed format. Useful for server situations,
* where it makes sense to remove all versions that will not be used.
*
* @param bestQuality Quality above which versions can be removed.
* @param keepFormat The readme format to keep.
*/
public void purge(MarkupFormat bestQuality) {
// TODO implement
public void purge(MarkupFormat keepFormat) {
Arrays.stream(MarkupFormat.values())
.filter( f->! f.equals(keepFormat) )
.forEach( f -> readmes.remove(f) );
}

public LocalizedModelData getLocalizedModelData() {
Expand Down Expand Up @@ -81,7 +87,7 @@ public MarkupString getReadme(MarkupFormat fmt) {
}

void addReadme( MarkupFormat fmt, String content ) {
readmes.put(fmt, new MarkupString(fmt,language) );
readmes.put(fmt, new MarkupString(fmt,content) );
}

public String getLanguage() {
Expand All @@ -100,12 +106,24 @@ public Set<String> getLocalizedNodeIds() {
return nodeText.keySet();
}

void setPolicySpaceEntityText( List<String> path, String text ) {
policySpaceEntityText.put(path, text);
public void setSlotText( SlotType st, String text ) {
if ( text.trim().length() > 0 ) {
slotsText.put(st, text);
}
}

public Optional<String> getSlotText( SlotType st ) {
return Optional.ofNullable(slotsText.get(st));
}

public void setSlotValueText( TagValue tv, String text ) {
if ( text.trim().length() > 0 ) {
slotValuesText.put(tv, text);
}
}

public Optional<String> getPolicySpaceEntityText( List<String> path ) {
return Optional.ofNullable( policySpaceEntityText.get(path) );
public Optional<String> getSlotValueText( TagValue tv ) {
return Optional.ofNullable(slotValuesText.get(tv));
}

@Override
Expand Down
Loading

0 comments on commit f5a298b

Please sign in to comment.