Skip to content

Commit

Permalink
Add getErrorCollector() to ConsistencyCheck
Browse files Browse the repository at this point in the history
  • Loading branch information
koppor committed Jun 13, 2018
1 parent 95bdf7c commit f28e166
Show file tree
Hide file tree
Showing 5 changed files with 84 additions and 50 deletions.
Expand Up @@ -13,20 +13,33 @@
********************************************************************************/
package org.eclipse.winery.cli;

import me.tongfei.progressbar.ProgressBar;
import me.tongfei.progressbar.ProgressBarStyle;
import org.apache.commons.cli.*;
import org.eclipse.winery.repository.backend.IRepository;
import org.eclipse.winery.repository.backend.RepositoryFactory;
import org.eclipse.winery.repository.backend.consistencycheck.*;
import org.eclipse.winery.repository.backend.filebased.FilebasedRepository;

import javax.xml.namespace.QName;
import java.nio.file.Paths;
import java.util.EnumSet;
import java.util.Map;
import java.util.Objects;

import javax.xml.namespace.QName;

import org.eclipse.winery.repository.backend.IRepository;
import org.eclipse.winery.repository.backend.RepositoryFactory;
import org.eclipse.winery.repository.backend.consistencycheck.ConsistencyChecker;
import org.eclipse.winery.repository.backend.consistencycheck.ConsistencyCheckerConfiguration;
import org.eclipse.winery.repository.backend.consistencycheck.ConsistencyCheckerProgressListener;
import org.eclipse.winery.repository.backend.consistencycheck.ConsistencyCheckerVerbosity;
import org.eclipse.winery.repository.backend.consistencycheck.ConsistencyErrorCollector;
import org.eclipse.winery.repository.backend.consistencycheck.ElementErrorList;
import org.eclipse.winery.repository.backend.filebased.FilebasedRepository;

import me.tongfei.progressbar.ProgressBar;
import me.tongfei.progressbar.ProgressBarStyle;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class WineryCli {

public static void main(String[] args) throws ParseException {
Expand Down Expand Up @@ -76,7 +89,7 @@ public static void main(String[] args) throws ParseException {

ProgressBar progressBar = new ProgressBar("Check", 100, ProgressBarStyle.ASCII);
progressBar.start();
ConsistencyErrorCollector errors = ConsistencyChecker.checkCorruption(configuration, new ConsistencyCheckerProgressListener() {
final ConsistencyChecker consistencyChecker = new ConsistencyChecker(configuration, new ConsistencyCheckerProgressListener() {
@Override
public void updateProgress(float progress) {
progressBar.stepTo((long) (progress * 100));
Expand All @@ -88,7 +101,8 @@ public void updateProgress(float progress, String checkingDefinition) {
progressBar.stepTo((long) (progress * 100));
}
});
progressBar.stop();
consistencyChecker.checkCorruption();
ConsistencyErrorCollector errors = consistencyChecker.getErrorCollector();

System.out.println();
if (errors.getErrorList().isEmpty()) {
Expand Down
@@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2012-2013 Contributors to the Eclipse Foundation
* Copyright (c) 2012-2018 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
Expand All @@ -13,14 +13,19 @@
*******************************************************************************/
package org.eclipse.winery.repository.rest.resources.admin;

import io.swagger.annotations.Api;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import org.eclipse.winery.repository.backend.IRepository;
import org.eclipse.winery.repository.backend.RepositoryFactory;
import org.eclipse.winery.repository.backend.consistencycheck.ConsistencyChecker;
Expand All @@ -34,12 +39,14 @@
import org.eclipse.winery.repository.rest.resources.admin.types.PlanTypesManager;
import org.eclipse.winery.repository.rest.resources.apiData.OAuthStateAndCodeApiData;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import io.swagger.annotations.Api;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;

@Api(tags = "Admin")
public class AdminTopResource {
Expand Down Expand Up @@ -76,7 +83,9 @@ public ConsistencyErrorCollector checkConsistency(@QueryParam("serviceTemplatesO
IRepository repo = RepositoryFactory.getRepository();
EnumSet<ConsistencyCheckerVerbosity> verbosity = EnumSet.of(ConsistencyCheckerVerbosity.NONE);
ConsistencyCheckerConfiguration config = new ConsistencyCheckerConfiguration(serviceTemplatesOnly, checkDocumentation, verbosity, repo);
return ConsistencyChecker.checkCorruption(config);
final ConsistencyChecker consistencyChecker = new ConsistencyChecker(config);
consistencyChecker.checkCorruption();
return consistencyChecker.getErrorCollector();
}

@POST
Expand Down
@@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (c) 2017 Contributors to the Eclipse Foundation
* Copyright (c) 2017-2018 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
Expand All @@ -13,18 +13,24 @@
********************************************************************************/
package org.eclipse.winery.repository.rest.websockets;

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;

import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;

import org.eclipse.winery.repository.backend.consistencycheck.ConsistencyChecker;
import org.eclipse.winery.repository.backend.consistencycheck.ConsistencyCheckerConfiguration;
import org.eclipse.winery.repository.backend.consistencycheck.ConsistencyCheckerProgressListener;
import org.eclipse.winery.repository.backend.consistencycheck.ConsistencyErrorCollector;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;

@ServerEndpoint("/checkconsistency")
public class ConsistencyCheckWebSocket implements ConsistencyCheckerProgressListener {

Expand Down Expand Up @@ -55,7 +61,9 @@ public void onMessage(String message, Session session) throws IOException {

ConsistencyCheckerConfiguration config = mapper.readValue(message, ConsistencyCheckerConfiguration.class);

ConsistencyErrorCollector errorList = ConsistencyChecker.checkCorruption(config, this);
final ConsistencyChecker consistencyChecker = new ConsistencyChecker(config, this);
consistencyChecker.checkCorruption();
ConsistencyErrorCollector errorList = consistencyChecker.getErrorCollector();

// Transform object to JSON and send it.
this.session.getBasicRemote().sendText(mapper.writeValueAsString(errorList));
Expand Down
Expand Up @@ -78,7 +78,7 @@ public class ConsistencyChecker {
private final ConsistencyCheckerProgressListener progressListener;

// Updated throughout the check
private final ConsistencyErrorCollector errorLogger = new ConsistencyErrorCollector();
private final ConsistencyErrorCollector errorCollector = new ConsistencyErrorCollector();

public ConsistencyChecker(ConsistencyCheckerConfiguration configuration) {
this(configuration, new ConsistencyCheckerProgressListener() {
Expand All @@ -93,7 +93,7 @@ public ConsistencyChecker(ConsistencyCheckerConfiguration configuration, Consist
/**
* This method may be called only once during the lifecycle of this object
*/
public ConsistencyErrorCollector checkCorruption() {
public void checkCorruption() {
Set<DefinitionsChildId> allDefinitionsChildIds = configuration.getRepository().getAllDefinitionsChildIds();
if (configuration.isServiceTemplatesOnly()) {
allDefinitionsChildIds = allDefinitionsChildIds.stream().filter(id -> id instanceof ServiceTemplateId).collect(Collectors.toSet());
Expand All @@ -109,8 +109,6 @@ public ConsistencyErrorCollector checkCorruption() {
&& !configuration.getVerbosity().contains(ConsistencyCheckerVerbosity.OUTPUT_CURRENT_TOSCA_COMPONENT_ID)) {
System.out.println();
}

return errorLogger;
}

/**
Expand Down Expand Up @@ -272,7 +270,7 @@ private void checkPropertiesValidation(DefinitionsChildId id) {
printAndAddError(id, "No Xml Schema definition found for " + element);
return;
}
validate(any, configuration, id);
validate(repositoryFileReference, any, id);
}
}
}
Expand Down Expand Up @@ -374,15 +372,15 @@ private void checkCsar(DefinitionsChildId id, Path tempCsar) {
}
}

private ConsistencyErrorCollector checkAllDefinitions(Set<DefinitionsChildId> allDefinitionsChildIds) {
private void checkAllDefinitions(Set<DefinitionsChildId> allDefinitionsChildIds) {
final Path tempCsar;

try {
tempCsar = Files.createTempFile("Export", ".csar");
} catch (IOException e) {
LOGGER.debug("Could not create temp CSAR file", e);
errorLogger.error("Could not create temp CSAR file");
return errorLogger;
errorCollector.error("Could not create temp CSAR file");
return;
}

float elementsChecked = 0;
Expand All @@ -407,18 +405,16 @@ private ConsistencyErrorCollector checkAllDefinitions(Set<DefinitionsChildId> al
checkPlainConformance(id, tempCsar);
checkCsar(id, tempCsar);
}

return errorLogger;
}

private void printAndAddError(DefinitionsChildId id, String error) {
printError(error);
errorLogger.error(id, error);
errorCollector.error(id, error);
}

private void printAndAddWarning(DefinitionsChildId id, String error) {
printError(error);
errorLogger.warning(id, error);
errorCollector.warning(id, error);
}

private void printError(String error) {
Expand All @@ -429,4 +425,8 @@ private void printError(String error) {
System.out.println(error);
}
}

public ConsistencyErrorCollector getErrorCollector() {
return this.errorCollector;
}
}
Expand Up @@ -13,20 +13,23 @@
********************************************************************************/
package org.eclipse.winery.repository.backend.consistencycheck;

import java.util.Collections;
import java.util.EnumSet;

import org.eclipse.winery.common.ids.definitions.NodeTypeImplementationId;

import org.junit.Assert;
import org.junit.Test;

import java.util.Collections;
import java.util.EnumSet;

public class ConsistencyCheckerTest {

@Test
public void nodeTypeImplementationNamespace() throws Exception {
NodeTypeImplementationId id = new NodeTypeImplementationId("http://winery.opentosca.org/test/nodetypeimplementations/fruits", "baobab_impl", false);
ConsistencyErrorCollector errorLogger = new ConsistencyErrorCollector();
ConsistencyChecker.checkNamespaceUri(errorLogger, EnumSet.of(ConsistencyCheckerVerbosity.NONE), id);
final ConsistencyCheckerConfiguration consistencyCheckerConfiguration = new ConsistencyCheckerConfiguration(false, true, EnumSet.of(ConsistencyCheckerVerbosity.NONE), null);
final ConsistencyChecker consistencyChecker = new ConsistencyChecker(consistencyCheckerConfiguration);
consistencyChecker.checkNamespaceUri(id);
Assert.assertEquals(Collections.emptyMap(), errorLogger.getErrorList());
}
}

0 comments on commit f28e166

Please sign in to comment.