use of org.phoenicis.repository.RepositoryException in project POL-POM-5 by PhoenicisOrg.
the class ClasspathRepository method buildScript.
private ScriptDTO buildScript(String typeId, String categoryId, String applicationId, String typeFileName, String categoryFileName, String applicationFileName, String scriptFileName) throws RepositoryException {
try {
final String scriptJsonFile = packagePath + "/" + typeFileName + "/" + categoryFileName + "/" + applicationFileName + "/" + scriptFileName + "/script.json";
final InputStream scriptJsonInputStream = getClass().getResourceAsStream(scriptJsonFile);
final InputStream scriptFile = getClass().getResourceAsStream(packagePath + "/" + typeFileName + "/" + categoryFileName + "/" + applicationFileName + "/" + scriptFileName + "/script.js");
if (scriptJsonInputStream == null) {
return null;
}
URI icon = null;
final String iconResource = packagePath + "/" + typeFileName + "/" + categoryFileName + "/" + applicationFileName + "/" + scriptFileName + "/icon.png";
URL iconResourceURL = getClass().getResource(iconResource);
if (iconResourceURL != null) {
try {
icon = iconResourceURL.toURI();
} catch (URISyntaxException e) {
LOGGER.debug("Could not get URI of script icon.");
}
} else {
LOGGER.debug("Could not find script icon.");
}
ScriptDTO.Builder scriptDTOBuilder = new ScriptDTO.Builder(objectMapper.readValue(scriptJsonInputStream, ScriptDTO.class)).withTypeId(typeId).withCategoryId(categoryId).withApplicationId(applicationId).withScript(new String(IOUtils.toByteArray(scriptFile))).withIcon(icon);
if (StringUtils.isBlank(scriptDTOBuilder.getId())) {
if (!StringUtils.isBlank(scriptDTOBuilder.getScriptName())) {
scriptDTOBuilder.withId(scriptDTOBuilder.getScriptName().replaceAll(INVALID_ID_CHARS_REGEX, ""));
} else {
scriptDTOBuilder.withId(scriptFileName.replaceAll(INVALID_ID_CHARS_REGEX, ""));
}
}
return scriptDTOBuilder.build();
} catch (IOException e) {
throw new RepositoryException("Could not build script", e);
}
}
use of org.phoenicis.repository.RepositoryException in project POL-POM-5 by PhoenicisOrg.
the class ClasspathRepository method buildType.
private TypeDTO buildType(String typeFileName) throws RepositoryException {
try {
final String jsonTypePath = packagePath + "/" + typeFileName + "/type.json";
final URL jsonTypeFile = getClass().getResource(jsonTypePath);
if (jsonTypeFile != null) {
final TypeDTO typeDTO = objectMapper.readValue(jsonTypeFile, TypeDTO.class);
TypeDTO.Builder typeDTOBuilder = new TypeDTO.Builder(typeDTO);
if (StringUtils.isBlank(typeDTO.getId())) {
if (!StringUtils.isBlank(typeDTO.getName())) {
typeDTOBuilder.withId(typeDTO.getName().replaceAll(INVALID_ID_CHARS_REGEX, ""));
} else {
typeDTOBuilder.withId(typeFileName.replaceAll(INVALID_ID_CHARS_REGEX, ""));
}
}
typeDTOBuilder.withCategories(buildCategories(typeDTOBuilder.getId(), typeFileName)).build();
try {
typeDTOBuilder.withIcon(new URI(packagePath + "/" + typeFileName + "/icon.png"));
} catch (URISyntaxException e) {
LOGGER.warn("Invalid icon path", e);
}
return typeDTOBuilder.build();
} else {
LOGGER.debug(String.format("type.json %s for classpath repository does not exist", jsonTypePath));
return new TypeDTO.Builder().build();
}
} catch (IOException e) {
throw new RepositoryException("Could not build type", e);
}
}
use of org.phoenicis.repository.RepositoryException in project POL-POM-5 by PhoenicisOrg.
the class GitRepository method cloneOrUpdateWithLock.
private void cloneOrUpdateWithLock() throws RepositoryException {
synchronized (mutex) {
try {
LOGGER.info("Begin fetching process of '{}' to '{}'", this.repositoryUri, this.localFolder.getAbsolutePath());
boolean lockFileExists = this.lockFile.exists();
// check that the repository lock file exists
if (!lockFileExists) {
LOGGER.info("Creating lock file '{}' for git-repository '{}'", this.lockFile.getAbsolutePath(), this.repositoryUri);
try {
this.lockFile.getParentFile().mkdirs();
this.lockFile.createNewFile();
} catch (IOException e) {
final String message = String.format("Couldn't create lock file '%s'", this.lockFile.getAbsolutePath());
throw new RepositoryException(message, e);
}
}
try (FileOutputStream lockFileStream = new FileOutputStream(lockFile, true)) {
try (FileLock ignored = lockFileStream.getChannel().lock()) {
cloneOrUpdate();
}
}
} catch (IOException e) {
throw new RepositoryException("An unknown error occurred", e);
}
}
}
use of org.phoenicis.repository.RepositoryException in project POL-POM-5 by PhoenicisOrg.
the class GitRepository method cloneOrUpdate.
private void cloneOrUpdate() throws RepositoryException {
final boolean folderExists = this.localFolder.exists();
// check that the repository folder exists
if (!folderExists) {
LOGGER.info("Creating local folder '{}' for git-repository '{}'", this.localFolder.getAbsolutePath(), this.repositoryUri);
if (!this.localFolder.mkdirs()) {
final String message = String.format("Couldn't create local folder '%s' for git-repository '%s'", this.localFolder.getAbsolutePath(), this.repositoryUri);
throw new RepositoryException(message);
}
}
if (!folderExists) {
LOGGER.info("Cloning git-repository '{}' to '{}'", this.repositoryUri, this.localFolder.getAbsolutePath());
try (final Git gitRepository = Git.cloneRepository().setURI(this.repositoryUri.toString()).setDirectory(this.localFolder).setBranch(this.branch).call()) {
LOGGER.info("Finished cloning git-repository '{}' to '{}'", this.repositoryUri, this.localFolder);
} catch (GitAPIException e) {
final String message = String.format("Folder '%s' is no git-repository", this.localFolder.getAbsolutePath());
throw new RepositoryException(message, e);
}
} else {
LOGGER.info("Opening git-repository at '{}'", this.localFolder.getAbsolutePath());
// TODO: it might make sense to ensure that our local checkout is not empty / a valid git repository
try (final Git gitRepository = Git.open(this.localFolder)) {
LOGGER.info("Pulling new commits to '{}'", this.localFolder.getAbsolutePath());
gitRepository.pull().call();
LOGGER.info("Finished pulling new commits to '{}'", this.localFolder.getAbsolutePath());
} catch (IOException | GitAPIException e) {
LOGGER.warn("Could not update {0}. Local checkout will be used.", e);
}
}
}
Aggregations