Skip to content

Commit cbac726

Browse files
authored
Add a gradle task to generate the UML images (#258)
* Add a gradle task to generate the UML images And generate existing UMLs * Update buildSrc/src/main/java/com/microsoft/hydralab/compile/UMLImageGenerator.java * Update agent/doc/UML/test_runner_design.puml * Comments resolved
1 parent 51736a4 commit cbac726

16 files changed

+75
-8
lines changed

agent/doc/UML/agent_device_management_design.puml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@startuml new_design
1+
@startuml
22
'https://plantuml.com/class-diagram
33

44
class AgentManagementService {

agent/doc/UML/logger_file_design.puml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@startuml
1+
@startuml log_file_path
22
'https://plantuml.com/class-diagram
33

44
object DeviceLogger
@@ -16,6 +16,6 @@ TestRunLogger -u-|> DeviceLogger
1616

1717
@startuml loggers
1818
EachTestDevice *--> DeviceLogger
19-
EachTestTaskOnEachTargetDevice *--> TaskOnDeviceLogger
20-
EachTestTaskOnEachTargetDevice *--> LogcatLogger
19+
EachTestRun *--> TestRunLogger
20+
AndroidDevice *--> LogcatLogger
2121
@enduml

agent/doc/UML/test_runner_design.puml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
@startuml test_runners_classes
1+
@startuml test_runner_class_relation
22
abstract class TestRunner {
33
#createTestRun(...)
44
#setUp(TestTask)
@@ -114,7 +114,7 @@ deactivate TaskCompletion
114114
}
115115
@endjson
116116

117-
@startuml design
117+
@startuml test_runner_listener_design
118118
abstract class Runner
119119
interface TestRunnerListener {
120120
onTestCaseStart()
@@ -128,7 +128,7 @@ interface TestRunnerListener {
128128
Runner *--> TestRunnerListener
129129
@enduml
130130

131-
@startuml test_objects
131+
@startuml test_entities
132132

133133
entity (TestTaskSpec)
134134
entity (TestTask)
@@ -141,7 +141,7 @@ TestTask *--> TestRun: contain a list of
141141
TestRun *--> AndroidTestUnit: contain a list of
142142
@enduml
143143

144-
@startuml test_objects
144+
@startuml test_object_relationships
145145

146146
entity (TestTaskSpec)
147147
entity (TestTask)

build.gradle

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,19 @@ task packageWindowsInstaller(type: Zip) {
8888
from 'agent/agent_installer/Windows'
8989
archiveName 'Hydra_Agent_Installer_Windows.zip'
9090
destinationDir file('build/installer')
91+
}
92+
import com.microsoft.hydralab.compile.UMLImageGenerator
93+
94+
task generateUMLImage(group: 'documentation') {
95+
doFirst {
96+
def scanningDirList = ['agent/doc/UML']
97+
def outputDir = new File(projectDir, 'docs/images/UML')
98+
99+
def generator = new UMLImageGenerator()
100+
scanningDirList.each {
101+
fileTree(new File(projectDir, it)).filter { it.name.endsWith(".puml") }.files.each {
102+
generator.generateUMLImageFromFile(it.absoluteFile, outputDir)
103+
}
104+
}
105+
}
91106
}

buildSrc/build.gradle

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
repositories {
2+
mavenLocal()
3+
mavenCentral()
4+
}
5+
6+
dependencies {
7+
implementation gradleApi()
8+
implementation 'net.sourceforge.plantuml:plantuml:1.2021.9'
9+
testImplementation group: 'junit', name: 'junit', version: '4.12'
10+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
package com.microsoft.hydralab.compile;
4+
5+
import net.sourceforge.plantuml.FileFormat;
6+
import net.sourceforge.plantuml.FileFormatOption;
7+
import net.sourceforge.plantuml.GeneratedImage;
8+
import net.sourceforge.plantuml.SourceFileReader;
9+
10+
import java.io.File;
11+
import java.io.IOException;
12+
import java.util.List;
13+
14+
public class UMLImageGenerator {
15+
public void generateUMLImageFromFile(File source) throws IOException {
16+
generateUMLImageFromFile(source, source.getAbsoluteFile().getParentFile(), false);
17+
}
18+
19+
public void generateUMLImageFromFile(File source, File outputDir) throws IOException {
20+
generateUMLImageFromFile(source, outputDir, false);
21+
}
22+
23+
public void generateUMLImageFromFile(File source, File outputDir, boolean svg) throws IOException {
24+
if (!source.exists()) throw new RuntimeException(source.getAbsolutePath() + " file doesn't exist");
25+
26+
SourceFileReader reader = svg ?
27+
new SourceFileReader(source, outputDir, new FileFormatOption(FileFormat.SVG)) :
28+
new SourceFileReader(source, outputDir);
29+
30+
List<GeneratedImage> list = reader.getGeneratedImages();
31+
System.out.printf("Successfully generated %d UML images.\n", list.size());
32+
}
33+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.microsoft.hydralab.compile;
2+
3+
import org.junit.Test;
4+
5+
public class TestUMLGeneration {
6+
@Test
7+
public void emptyTest() {
8+
}
9+
}
27.9 KB
Loading

docs/images/UML/log_file_path.png

11.2 KB
Loading

docs/images/UML/loggers.png

7.9 KB
Loading

0 commit comments

Comments
 (0)