[ONOS-3634] Enhance app to have a category, icon, URL and readme
This commmit enhances application to have category, icon, URL and
readme. The web GUI and CLI will be implemented in separate commits
Change-Id: Ib02716d7118cc617b24f196f2213ea1fe99a34be
diff --git a/tools/package/maven-plugin/src/main/java/org/onosproject/maven/OnosAppMojo.java b/tools/package/maven-plugin/src/main/java/org/onosproject/maven/OnosAppMojo.java
index 09cf4dd..d52c3b7 100644
--- a/tools/package/maven-plugin/src/main/java/org/onosproject/maven/OnosAppMojo.java
+++ b/tools/package/maven-plugin/src/main/java/org/onosproject/maven/OnosAppMojo.java
@@ -18,6 +18,7 @@
import com.google.common.collect.ImmutableList;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.commons.lang.StringUtils;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
@@ -28,6 +29,11 @@
import org.apache.maven.project.MavenProject;
import org.apache.maven.project.MavenProjectHelper;
+import javax.imageio.ImageIO;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBufferByte;
+import java.awt.image.WritableRaster;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@@ -55,6 +61,7 @@
private static final String ARTIFACT = "artifact";
private static final String APP_XML = "app.xml";
+ private static final String ICON_PNG = "icon.png";
private static final String FEATURES_XML = "features.xml";
private static final String MVN_URL = "mvn:";
@@ -64,6 +71,10 @@
private static final String ONOS_APP_ORIGIN = "onos.app.origin";
private static final String ONOS_APP_REQUIRES = "onos.app.requires";
+ private static final String ONOS_APP_CATEGORY = "onos.app.category";
+ private static final String ONOS_APP_URL = "onos.app.url";
+ private static final String ONOS_APP_README = "onos.app.readme";
+
private static final String JAR = "jar";
private static final String XML = "xml";
private static final String APP_ZIP = "oar";
@@ -72,6 +83,9 @@
private static final String DEFAULT_ORIGIN = "ON.Lab";
private static final String DEFAULT_VERSION = "${project.version}";
+ private static final String DEFAULT_CATEGORY = "Default";
+ private static final String DEFAULT_URL = "http://onosproject.org";
+
private static final String DEFAULT_FEATURES_REPO =
"mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features";
private static final String DEFAULT_ARTIFACT =
@@ -82,6 +96,9 @@
private String name;
private String origin;
private String requiredApps;
+ private String category;
+ private String url;
+ private String readme;
private String version = DEFAULT_VERSION;
private String featuresRepo = DEFAULT_FEATURES_REPO;
private List<String> artifacts;
@@ -137,7 +154,6 @@
@Component
protected MavenProjectHelper projectHelper;
-
private File m2Directory;
protected File stageDirectory;
protected String projectPath;
@@ -165,6 +181,16 @@
requiredApps = (String) project.getProperties().get(ONOS_APP_REQUIRES);
requiredApps = requiredApps == null ? "" : requiredApps.replaceAll("[\\s]", "");
+ category = (String) project.getProperties().get(ONOS_APP_CATEGORY);
+ category = category != null ? category : DEFAULT_CATEGORY;
+
+ url = (String) project.getProperties().get(ONOS_APP_URL);
+ url = url != null ? url : DEFAULT_URL;
+
+ // if readme does not exist, we simply fallback to use description
+ readme = (String) project.getProperties().get(ONOS_APP_README);
+ readme = readme != null ? readme : projectDescription;
+
if (appFile.exists()) {
loadAppFile(appFile);
} else {
@@ -303,7 +329,7 @@
// Generates the ONOS package ZIP file.
private void generateAppPackage() throws MojoExecutionException {
File appZip = new File(dstDirectory, artifactFile(projectArtifactId, projectVersion,
- APP_ZIP, null));
+ APP_ZIP, null));
try (FileOutputStream fos = new FileOutputStream(appZip);
ZipOutputStream zos = new ZipOutputStream(fos)) {
zipDirectory("", stageDirectory, zos);
@@ -327,7 +353,7 @@
private String artifactFile(String[] fields) {
return fields.length < 5 ?
artifactFile(fields[1], fields[2],
- (fields.length < 4 ? JAR : fields[3]), null) :
+ (fields.length < 4 ? JAR : fields[3]), null) :
artifactFile(fields[1], fields[2], fields[3], fields[4]);
}
@@ -344,6 +370,9 @@
string.replaceAll("\\$\\{onos.app.name\\}", name)
.replaceAll("\\$\\{onos.app.origin\\}", origin)
.replaceAll("\\$\\{onos.app.requires\\}", requiredApps)
+ .replaceAll("\\$\\{onos.app.category\\}", category)
+ .replaceAll("\\$\\{onos.app.url\\}", url)
+ .replaceAll("\\$\\{onos.app.readme\\}", readme)
.replaceAll("\\$\\{project.groupId\\}", projectGroupId)
.replaceAll("\\$\\{project.artifactId\\}", projectArtifactId)
.replaceAll("\\$\\{project.version\\}", projectVersion)
@@ -375,4 +404,4 @@
}
}
}
-}
+}
\ No newline at end of file