summaryrefslogtreecommitdiffstats
path: root/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/BuildState.java
diff options
context:
space:
mode:
Diffstat (limited to 'openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/BuildState.java')
-rw-r--r--openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/BuildState.java182
1 files changed, 99 insertions, 83 deletions
diff --git a/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/BuildState.java b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/BuildState.java
index 888622f959..17ff7c9500 100644
--- a/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/BuildState.java
+++ b/openecomp-be/tools/compile-helper-plugin/src/main/java/org/openecomp/sdc/onboarding/BuildState.java
@@ -16,7 +16,16 @@
package org.openecomp.sdc.onboarding;
+import static org.openecomp.sdc.onboarding.BuildHelper.readState;
+import static org.openecomp.sdc.onboarding.Constants.ANSI_COLOR_RESET;
+import static org.openecomp.sdc.onboarding.Constants.ANSI_YELLOW;
+import static org.openecomp.sdc.onboarding.Constants.FULL_BUILD_DATA;
+import static org.openecomp.sdc.onboarding.Constants.FULL_RESOURCE_BUILD_DATA;
+import static org.openecomp.sdc.onboarding.Constants.JAR;
+import static org.openecomp.sdc.onboarding.Constants.MODULE_BUILD_DATA;
import static org.openecomp.sdc.onboarding.Constants.RESOURCES_CHANGED;
+import static org.openecomp.sdc.onboarding.Constants.RESOURCE_BUILD_DATA;
+import static org.openecomp.sdc.onboarding.Constants.SKIP_MAIN_SOURCE_COMPILE;
import java.io.File;
import java.io.FileInputStream;
@@ -24,64 +33,65 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.Collection;
import java.util.HashMap;
-import java.util.Iterator;
+import java.util.HashSet;
import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
import java.util.function.BiFunction;
import java.util.function.Function;
-import java.util.stream.Stream;
+import org.apache.maven.artifact.Artifact;
import org.apache.maven.project.MavenProject;
public class BuildState {
- private static Map<String, Long> fullBuildData = new HashMap<>();
- private static Map<String, Long> fullResourceBuildData = new HashMap<>();
+ private static Map<String, Map> compileDataStore = new HashMap<>();
private static Map<String, Object> moduleBuildData = new HashMap<>();
private static Map<String, Object> resourceBuildData = new HashMap<>();
+ private static Map<String, Artifact> artifacts = new HashMap<>();
+ private static Set<String> executeTestsIfDependsOnStore = new HashSet<>();
+ private static Set<String> pmdExecutedInRun = new HashSet<>();
- private static File buildStateFile;
- private static File resourceStateFile;
- private File moduleBuildDataFile;
- private File resourceBuildDataFile;
+ private static File compileStateFile;
private MavenProject project;
- private String buildStateFilePath;
- private String resourceStateFilePath;
+ private String compileStateFilePath;
- private void readFullBuildState() {
- buildStateFile = initialize(this::getBuildStateFile, fullBuildData,
- buildStateFilePath.substring(0, buildStateFilePath.indexOf('/')), project);
+ static {
+ initializeStore();
+ Optional<HashMap> masterStore = readState("compile.dat", HashMap.class);
+ compileDataStore = masterStore.isPresent() ? masterStore.get() : compileDataStore;
}
- private void readResourceBuildState() {
- resourceStateFile = initialize(this::getResourceStateFile, fullResourceBuildData,
- resourceStateFilePath.substring(0, resourceStateFilePath.indexOf('/')), project);
+ void init() {
+ artifacts.clear();
+ for (Artifact artifact : project.getArtifacts()) {
+ if (artifact.isSnapshot() && JAR.equals(artifact.getType())) {
+ artifacts.put(artifact.getGroupId() + ":" + artifact.getArtifactId(), artifact);
+ }
+ }
+ compileStateFile =
+ getCompileStateFile(compileStateFilePath.substring(0, compileStateFilePath.indexOf('/')), project);
+ }
+ static void initializeStore() {
+ compileDataStore.put(FULL_BUILD_DATA, new HashMap<>());
+ compileDataStore.put(FULL_RESOURCE_BUILD_DATA, new HashMap<>());
+ compileDataStore.put(MODULE_BUILD_DATA, new HashMap<>());
+ compileDataStore.put(RESOURCE_BUILD_DATA, new HashMap<>());
}
- private File initialize(BiFunction<String, MavenProject, File> funct, Map store, String moduleCoordinate,
- MavenProject proj) {
- File file = funct.apply(moduleCoordinate, proj);
- file.getParentFile().mkdirs();
- try (FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis);) {
- if (store.isEmpty()) {
- store.putAll(HashMap.class.cast(ois.readObject()));
- }
- } catch (Exception e) {
- store.clear();
- }
- return file;
+
+ static void recordPMDRun(String moduleCoordinates) {
+ pmdExecutedInRun.add(moduleCoordinates);
}
- private void writeFullBuildState() throws IOException {
- writeState(buildStateFile, fullBuildData);
+ static boolean isPMDRun(String moduleCoordintes) {
+ return pmdExecutedInRun.contains(moduleCoordintes);
}
- private void writeFullResourceBuildState() throws IOException {
- writeState(resourceStateFile, fullResourceBuildData);
+ private void writeCompileState() throws IOException {
+ writeState(compileStateFile, compileDataStore);
}
private void writeState(File file, Map store) throws IOException {
@@ -90,20 +100,18 @@ public class BuildState {
}
}
- private File getBuildStateFile(String moduleCoordinate, MavenProject proj) {
- return getStateFile(moduleCoordinate, proj, buildStateFilePath);
- }
- private File getResourceStateFile(String moduleCoordinate, MavenProject proj) {
- return getStateFile(moduleCoordinate, proj, resourceStateFilePath);
+ private File getCompileStateFile(String moduleCoordinate, MavenProject proj) {
+ return getStateFile(moduleCoordinate, proj, compileStateFilePath);
}
+
private File getStateFile(String moduleCoordinate, MavenProject proj, String filePath) {
return new File(getTopParentProject(moduleCoordinate, proj).getBasedir(),
filePath.substring(filePath.indexOf('/') + 1));
}
- private MavenProject getTopParentProject(String moduleCoordinate, MavenProject proj) {
+ MavenProject getTopParentProject(String moduleCoordinate, MavenProject proj) {
if (getModuleCoordinate(proj).equals(moduleCoordinate) || proj.getParent() == null) {
return proj;
} else {
@@ -116,10 +124,12 @@ public class BuildState {
}
void addModuleBuildTime(String moduleCoordinates, Long buildTime) {
- Long lastTime = fullBuildData.put(moduleCoordinates, buildTime);
+ Long lastTime = Long.class.cast(compileDataStore.get(FULL_BUILD_DATA).put(moduleCoordinates, buildTime));
try {
if (lastTime == null || !lastTime.equals(buildTime)) {
- writeFullBuildState();
+ if (!project.getProperties().containsKey(SKIP_MAIN_SOURCE_COMPILE)) {
+ writeCompileState();
+ }
}
} catch (IOException ignored) {
// ignored. No need to handle. System will take care.
@@ -127,10 +137,11 @@ public class BuildState {
}
void addResourceBuildTime(String moduleCoordinates, Long buildTime) {
- if (project.getProperties().containsKey(RESOURCES_CHANGED)) {
- Long lastTime = fullResourceBuildData.put(moduleCoordinates, buildTime);
+ if (project.getProperties().containsKey(RESOURCES_CHANGED)
+ || compileDataStore.get(FULL_RESOURCE_BUILD_DATA).get(moduleCoordinates) == null) {
try {
- writeFullResourceBuildState();
+ compileDataStore.get(FULL_RESOURCE_BUILD_DATA).put(moduleCoordinates, buildTime);
+ writeCompileState();
} catch (IOException ignored) {
// ignored. No need to handle. System will take care.
}
@@ -142,15 +153,29 @@ public class BuildState {
}
Map<String, Object> readModuleBuildData() {
- return readBuildData(moduleBuildDataFile);
+ return HashMap.class.cast(compileDataStore.get(MODULE_BUILD_DATA).get(getModuleCoordinate(project)));
}
void saveModuleBuildData(String moduleCoordinate) {
- saveBuildData(moduleBuildDataFile, moduleBuildData.get(moduleCoordinate));
+ if (moduleBuildData.get(moduleCoordinate) != null) {
+ compileDataStore.get(MODULE_BUILD_DATA).put(moduleCoordinate, moduleBuildData.get(moduleCoordinate));
+ }
+ saveCompileData();
}
void saveResourceBuildData(String moduleCoordinate) {
- saveBuildData(resourceBuildDataFile, resourceBuildData.get(moduleCoordinate));
+ if (resourceBuildData.get(moduleCoordinate) != null) {
+ compileDataStore.get(RESOURCE_BUILD_DATA).put(moduleCoordinate, resourceBuildData.get(moduleCoordinate));
+ }
+ saveCompileData();
+ }
+
+ void saveCompileData() {
+ saveBuildData(compileStateFile, compileDataStore);
+ }
+
+ void markTestsMandatoryModule(String moduleCoordinates) {
+ executeTestsIfDependsOnStore.add(moduleCoordinates);
}
private void saveBuildData(File file, Object dataToSave) {
@@ -166,41 +191,50 @@ public class BuildState {
}
Map<String, Object> readResourceBuildData() {
- return readBuildData(resourceBuildDataFile);
+ return HashMap.class.cast(compileDataStore.get(RESOURCE_BUILD_DATA).get(getModuleCoordinate(project)));
}
- private Map<String, Object> readBuildData(File file) {
- try (FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis)) {
- return HashMap.class.cast(ois.readObject());
- } catch (Exception e) {
- return new HashMap<>();
- }
- }
void addResourceBuildData(String moduleCoordinates, Map currentModuleResourceBuildData) {
resourceBuildData.put(moduleCoordinates, currentModuleResourceBuildData);
}
Long getBuildTime(String moduleCoordinates) {
- if (fullBuildData.isEmpty()) {
- readFullBuildState();
- readResourceBuildState();
- }
- Long buildTime = fullBuildData.get(moduleCoordinates);
+ Long buildTime = Long.class.cast(compileDataStore.get(FULL_BUILD_DATA).get(moduleCoordinates));
return buildTime == null ? 0 : buildTime;
}
Long getResourceBuildTime(String moduleCoordinates) {
- Long resourceBuildTime = fullResourceBuildData.get(moduleCoordinates);
+ Long resourceBuildTime = Long.class.cast(compileDataStore.get(FULL_RESOURCE_BUILD_DATA).get(moduleCoordinates));
return resourceBuildTime == null ? 0 : resourceBuildTime;
}
boolean isCompileMust(String moduleCoordinates, Collection<String> dependencies) {
+ for (String d : dependencies) {
+ if (artifacts.containsKey(d) && JAR.equals(artifacts.get(d).getType())) {
+ if (artifacts.get(d).getVersion().equals(project.getVersion()) && getBuildTime(d) == 0) {
+ System.out.println(ANSI_YELLOW + "[WARNING:]" + "You have module[" + d
+ + "] not locally compiled even once, please compile your project once daily from root to have reliable build results."
+ + ANSI_COLOR_RESET);
+ return true;
+ }
+ }
+ }
return isMust(this::getBuildTime, moduleCoordinates, dependencies);
}
- boolean isTestMust(String moduleCoordinates, Collection<String> dependencies) {
- return isMust(this::getResourceBuildTime, moduleCoordinates, dependencies);
+ boolean isTestExecutionMandatory() {
+ for (String d : artifacts.keySet()) {
+ if (executeTestsIfDependsOnStore.contains(d)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ boolean isTestMust(String moduleCoordinates) {
+ return getBuildTime(moduleCoordinates) > getResourceBuildTime(moduleCoordinates) || isMust(
+ this::getResourceBuildTime, moduleCoordinates, artifacts.keySet());
}
private boolean isMust(Function<String, Long> funct, String moduleCoordinates, Collection<String> dependencies) {
@@ -217,22 +251,4 @@ public class BuildState {
return false;
}
- void markModuleDirty(File file) throws IOException {
- if (file.exists()) {
- Stream<String> lines = Files.lines(file.toPath());
- Iterator<String> itr = lines.iterator();
- while (itr.hasNext()) {
- String line = itr.next();
- Path path = Paths.get(line);
- if (path.toFile().exists()) {
- if (path.toFile().setLastModified(System.currentTimeMillis())) {
- break;
- } else {
- continue;
- }
- }
- }
- }
- }
-
}