From: <go...@us...> - 2010-04-29 17:20:09
|
Revision: 7021 http://unicore.svn.sourceforge.net/unicore/?rev=7021&view=rev Author: golbi Date: 2010-04-29 17:20:03 +0000 (Thu, 29 Apr 2010) Log Message: ----------- changing package name for consistency 1/2 Added Paths: ----------- problemutil/trunk/src/main/java/eu/unicore/problemutil/ problemutil/trunk/src/main/java/eu/unicore/problemutil/Problem.java problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemInstance.java problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemResolver.java problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemWithSolutions.java problemutil/trunk/src/main/java/eu/unicore/problemutil/Solution.java problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/DefaultProblemsBuilder.java problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/ExceptionCondition.java problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/Expression.java problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/GenericMatcher.java problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/LogicExpression.java problemutil/trunk/src/main/java/eu/unicore/problemutil/simple/ Removed Paths: ------------- problemutil/trunk/src/main/java/eu/unicore/helputil/ problemutil/trunk/src/main/java/eu/unicore/problemutil/Problem.java problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemResolver.java problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemWithSolutions.java problemutil/trunk/src/main/java/eu/unicore/problemutil/Solution.java problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/ExceptionCondition.java problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/GenericConditions.java problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/GenericMatcher.java Deleted: problemutil/trunk/src/main/java/eu/unicore/problemutil/Problem.java =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/helputil/Problem.java 2010-04-29 11:07:57 UTC (rev 7019) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/Problem.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -1,21 +0,0 @@ -/* - * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. - * See LICENCE file for licencing information. - * - * Created on 2010-02-18 - * Author: K. Benedyczak <go...@ma...> - */ - -package eu.unicore.helputil; - -import java.util.Map; - -public interface Problem -{ - public String getId(); - public String getName(); - public String getDescription(); - - public Throwable getCause(); - public Map<String, Object> getContext(); -} Copied: problemutil/trunk/src/main/java/eu/unicore/problemutil/Problem.java (from rev 7020, problemutil/trunk/src/main/java/eu/unicore/helputil/Problem.java) =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/problemutil/Problem.java (rev 0) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/Problem.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. + * See LICENCE file for licencing information. + * + * Created on 2010-02-18 + * Author: K. Benedyczak <go...@ma...> + */ + +package eu.unicore.helputil; + + +public interface Problem +{ + public String getId(); + public String getName(); + public String getDescription(); +} Copied: problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemInstance.java (from rev 7020, problemutil/trunk/src/main/java/eu/unicore/helputil/ProblemInstance.java) =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemInstance.java (rev 0) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemInstance.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. + * See LICENCE file for licencing information. + * + * Created on 2010-02-18 + * Author: K. Benedyczak <go...@ma...> + */ + +package eu.unicore.helputil; + +import java.util.Collections; +import java.util.Map; + +public class ProblemInstance +{ + private Problem problem; + private Throwable cause; + private Map<String, Object> context; + + public ProblemInstance(Problem problem, Throwable cause, + Map<String, Object> context) + { + this.problem = problem; + this.cause = cause; + this.context = context; + if (context == null) + this.context = Collections.emptyMap(); + } + + public Problem getProblem() + { + return problem; + } + + public Throwable getCause() + { + return cause; + } + + public Map<String, Object> getContext() + { + return context; + } +} Deleted: problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemResolver.java =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/helputil/ProblemResolver.java 2010-04-29 11:07:57 UTC (rev 7019) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemResolver.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. - * See LICENCE file for licencing information. - * - * Created on 2010-02-18 - * Author: K. Benedyczak <go...@ma...> - */ - -package eu.unicore.helputil; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Entry point. Keeps track of registered {@link Matcher}s, {@link Problem}s - * and {@link Solution}s. Provides methods to find {@link Problem}s matching - * a raw error (which is most often an exception). For {@link Problem} it is possible to get - * registered {@link Solution}s. - * @author golbi - */ -public class ProblemResolver -{ - private static final Map<String, Object> EMPTY = new HashMap<String, Object>(); - private static final String DEF_CONTEXT = ProblemResolver.class.getName() + ".DEF_CONTEXT"; - - public List<Problem> match(Throwable cause, Map<String, Object> ctx) - { - //TODO - return null; - } - - public List<Problem> match(Throwable cause, String ctx) - { - Map<String, Object> ctxMap = new HashMap<String, Object>(); - ctxMap.put(DEF_CONTEXT, ctx); - return match(cause, ctxMap); - } - - public List<Problem> match(Throwable cause) - { - return match(cause, EMPTY); - } - - public List<Solution> getSolutions(Problem problem) - { - //TODO - return null; - } - - public List<ProblemWithSolutions> findSolutions(Throwable cause, Map<String, Object> ctx) - { - List<Problem> problems = match(cause, ctx); - List<ProblemWithSolutions> ret = new ArrayList<ProblemWithSolutions>(); - for (Problem p: problems) - ret.add(new ProblemWithSolutions(p, getSolutions(p))); - return ret; - } - - public List<ProblemWithSolutions> findSolutions(Throwable cause, String ctx) - { - Map<String, Object> ctxMap = new HashMap<String, Object>(); - ctxMap.put(DEF_CONTEXT, ctx); - return findSolutions(cause, ctxMap); - } - - public List<ProblemWithSolutions> findSolutions(Throwable cause) - { - return findSolutions(cause, EMPTY); - } - - - - public void registerProblem(Problem toAdd) - { - //TODO - } - - public void registerSolution(Solution toAdd) - { - //TODO - } - - public void registerMatcher(Matcher toAdd) - { - //TODO - } -} Copied: problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemResolver.java (from rev 7020, problemutil/trunk/src/main/java/eu/unicore/helputil/ProblemResolver.java) =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemResolver.java (rev 0) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemResolver.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. + * See LICENCE file for licencing information. + * + * Created on 2010-02-18 + * Author: K. Benedyczak <go...@ma...> + */ + +package eu.unicore.helputil; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import eu.unicore.helputil.generic.DefaultProblemsBuilder; + +/** + * Entry point. Keeps track of registered {@link Matcher}s, {@link Problem}s + * and {@link Solution}s. Provides methods to find {@link Problem}s matching + * a raw error (which is most often an exception). For {@link Problem} it is possible to get + * registered {@link Solution}s. + * @author golbi + */ +public class ProblemResolver +{ + private static final Map<String, Object> EMPTY = new HashMap<String, Object>(); + private static final String DEF_CONTEXT = ProblemResolver.class.getName() + ".DEF_CONTEXT"; + + private List<Matcher> matchers; + private Map<String, Problem> problems; + private Map<String, List<Solution>> solutions; + + public ProblemResolver() + { + matchers = new ArrayList<Matcher>(); + problems = new HashMap<String, Problem>(); + solutions = new HashMap<String, List<Solution>>(); + + Problem[] ps = DefaultProblemsBuilder.createProblems(); + for (Problem p: ps) + registerProblem(p); + Matcher[] ms = DefaultProblemsBuilder.createMatchers(); + for (Matcher m: ms) + registerMatcher(m); + Solution[] ss = DefaultProblemsBuilder.createSolutions(); + for (Solution s: ss) + registerSolution(s); + } + + + public List<ProblemInstance> match(Throwable cause, Map<String, Object> ctx) + { + List<ProblemInstance> ret = new ArrayList<ProblemInstance>(); + for (Matcher m: matchers) + { + String problemId = m.match(cause, ctx); + if (problemId != null) + { + Problem p = problems.get(problemId); + if (p == null) + throw new IllegalStateException("Matcher " + m.getClass().getName() + + " returned unknown problem id: " + problemId); + ret.add(new ProblemInstance(p, cause, ctx)); + } + } + return ret; + } + + public List<ProblemInstance> match(Throwable cause, String ctx) + { + Map<String, Object> ctxMap = new HashMap<String, Object>(); + ctxMap.put(DEF_CONTEXT, ctx); + return match(cause, ctxMap); + } + + public List<ProblemInstance> match(Throwable cause) + { + return match(cause, EMPTY); + } + + public List<Solution> getSolutions(Problem problem) + { + List<Solution> ret = solutions.get(problem.getId()); + if (ret == null) + ret = Collections.emptyList(); + return ret; + } + + public List<ProblemWithSolutions> findSolutions(Throwable cause, Map<String, Object> ctx) + { + List<ProblemInstance> problems = match(cause, ctx); + List<ProblemWithSolutions> ret = new ArrayList<ProblemWithSolutions>(); + for (ProblemInstance p: problems) + ret.add(new ProblemWithSolutions(p, getSolutions(p.getProblem()))); + return ret; + } + + public List<ProblemWithSolutions> findSolutions(Throwable cause, String ctx) + { + Map<String, Object> ctxMap = new HashMap<String, Object>(); + ctxMap.put(DEF_CONTEXT, ctx); + return findSolutions(cause, ctxMap); + } + + public List<ProblemWithSolutions> findSolutions(Throwable cause) + { + return findSolutions(cause, EMPTY); + } + + + + public void registerProblem(Problem toAdd) + { + problems.put(toAdd.getId(), toAdd); + } + + public void registerSolution(Solution toAdd) + { + String[] ps = toAdd.applicableFor(); + for (String problemId: ps) + { + Problem p = problems.get(problemId); + if (p == null) + throw new IllegalStateException("Solution " + toAdd.getId() + + " is declared for an unknown problem id: " + problemId); + List<Solution> currentSols = solutions.get(problemId); + if (currentSols == null) + { + currentSols = new ArrayList<Solution>(); + solutions.put(problemId, currentSols); + } + currentSols.add(toAdd); + } + } + + public void registerMatcher(Matcher toAdd) + { + matchers.add(toAdd); + } +} Deleted: problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemWithSolutions.java =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/helputil/ProblemWithSolutions.java 2010-04-29 11:07:57 UTC (rev 7019) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemWithSolutions.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. - * See LICENCE file for licencing information. - * - * Created on 2010-02-18 - * Author: K. Benedyczak <go...@ma...> - */ - -package eu.unicore.helputil; - -import java.util.List; - -/** - * Convenience class, storing {@link Problem} and its {@link Solution}s. - * @author golbi - */ -public class ProblemWithSolutions -{ - private Problem problem; - private List<Solution> solutions; - - public ProblemWithSolutions(Problem problem, List<Solution> solutions) - { - this.problem = problem; - this.solutions = solutions; - } - - public Problem getProblem() - { - return problem; - } - public void setProblem(Problem problem) - { - this.problem = problem; - } - public List<Solution> getSolutions() - { - return solutions; - } - public void setSolutions(List<Solution> solutions) - { - this.solutions = solutions; - } - - -} Copied: problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemWithSolutions.java (from rev 7020, problemutil/trunk/src/main/java/eu/unicore/helputil/ProblemWithSolutions.java) =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemWithSolutions.java (rev 0) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/ProblemWithSolutions.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. + * See LICENCE file for licencing information. + * + * Created on 2010-02-18 + * Author: K. Benedyczak <go...@ma...> + */ + +package eu.unicore.helputil; + +import java.util.List; + +/** + * Convenience class, storing {@link Problem} and its {@link Solution}s. + * @author golbi + */ +public class ProblemWithSolutions +{ + private ProblemInstance problem; + private List<Solution> solutions; + + public ProblemWithSolutions(ProblemInstance problem, List<Solution> solutions) + { + this.problem = problem; + this.solutions = solutions; + } + + public ProblemInstance getProblem() + { + return problem; + } + public void setProblem(ProblemInstance problem) + { + this.problem = problem; + } + public List<Solution> getSolutions() + { + return solutions; + } + public void setSolutions(List<Solution> solutions) + { + this.solutions = solutions; + } + + +} Deleted: problemutil/trunk/src/main/java/eu/unicore/problemutil/Solution.java =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/helputil/Solution.java 2010-04-29 11:07:57 UTC (rev 7019) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/Solution.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. - * See LICENCE file for licencing information. - * - * Created on 2010-02-18 - * Author: K. Benedyczak <go...@ma...> - */ - -package eu.unicore.helputil; - -/** - * Top level solution which can be associated with {@link Problem} - * @author golbi - */ -public interface Solution -{ - public String getId(); - public String getDescription(); -} Copied: problemutil/trunk/src/main/java/eu/unicore/problemutil/Solution.java (from rev 7020, problemutil/trunk/src/main/java/eu/unicore/helputil/Solution.java) =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/problemutil/Solution.java (rev 0) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/Solution.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. + * See LICENCE file for licencing information. + * + * Created on 2010-02-18 + * Author: K. Benedyczak <go...@ma...> + */ + +package eu.unicore.helputil; + +/** + * Top level solution which can be associated with {@link Problem} + * @author golbi + */ +public interface Solution +{ + public static final String URC_TAG = "URC"; + public static final String UCC_TAG = "UCC"; + + public String getId(); + public String getDescription(); + + /** + * List of problem identifiers which this solution is applicable for. + * @return + */ + public String[] applicableFor(); + + /** + * Tags can be optionally used to link solutions to a particular environment. E.g + * a solution tagged with 'URC' is relevant for UNICORE Rich Client only. It should be assumed + * that in absence of tags a solution is universal. + * @return + */ + public String[] getTags(); +} Copied: problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/DefaultProblemsBuilder.java (from rev 7020, problemutil/trunk/src/main/java/eu/unicore/helputil/generic/DefaultProblemsBuilder.java) =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/DefaultProblemsBuilder.java (rev 0) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/DefaultProblemsBuilder.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2010 ICM Uniwersytet Warszawski All rights reserved. + * See LICENCE file for licencing information. + * + * Created on 2010-04-29 + * Author: K. Benedyczak <go...@ma...> + */ + +package eu.unicore.helputil.generic; + +import eu.unicore.helputil.Matcher; +import eu.unicore.helputil.Problem; +import eu.unicore.helputil.Solution; +import eu.unicore.helputil.generic.ExceptionCondition.Position; +import eu.unicore.helputil.generic.LogicExpression.LogicOp; +import eu.unicore.helputil.simple.SimpleProblem; +import eu.unicore.helputil.simple.SimpleSolution; + + +/** + * Loads default problems, matchers and solutions. All use {@link GenericMatcher} and are defined + * using API. + * + * TODO this class will need refactoring. + * @author golbi + */ +public class DefaultProblemsBuilder +{ + private static Problem TLS_CLI = new SimpleProblem("TLS_CLI", "Client is untrusted", + "Server does not trust the CA which issued client's certificate."); + private static Problem TLS_SRV = new SimpleProblem("TLS_SRV", "Server is untrusted", + "Client does not trust the CA which issued server's certificate."); + private static Problem NET_UNKNOWN_HOST = new SimpleProblem("NET_UNKNOWN_HOST", + "Server's hostname is unknown", "The hostname of the server can not be resolved."); + + public static Problem[] createProblems() + { + return new Problem[] { + TLS_CLI, + TLS_SRV, + NET_UNKNOWN_HOST + }; + } + + public static Matcher[] createMatchers() + { + LogicExpression serverUntrustedExpr = new LogicExpression(LogicOp.AND, + new ExceptionCondition("1", + "sun.security.provider.certpath.SunCertPathBuilderException", + Position.DEEPEST, + ".*unable to find valid certification path to requested target.*"), + + new ExceptionCondition("2", + "javax.net.ssl.SSLHandshakeException", + Position.ANY, + null, + "1") + ); + + return new Matcher[] { + new GenericMatcher(TLS_CLI, new ExceptionCondition("1", + "javax.net.ssl.SSLHandshakeException", + Position.DEEPEST, + ".*Received fatal alert: bad_certificate.*")), + new GenericMatcher(TLS_SRV, serverUntrustedExpr), + new GenericMatcher(NET_UNKNOWN_HOST, new ExceptionCondition("1", + "java.net.UnknownHostException", + Position.DEEPEST)) + }; + } + + public static Solution[] createSolutions() + { + return new Solution[] { + new SimpleSolution("TLS_CLI_GEN", TLS_CLI.getId(), + "Your certificate was not accepted by the server. Please verify that you use" + + " a correct certificate to identify yourself to the server."), + new SimpleSolution("TLS_SRV_GEN", TLS_SRV.getId(), + "You don't know (or trust) the issuer of the server's certificate you " + + "tried to connect with. If you are perfectly sure that you connect with a " + + "trusted server then add the certificate of the server's CA to your truststore.") + }; + } +} Deleted: problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/ExceptionCondition.java =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/helputil/generic/ExceptionCondition.java 2010-04-29 11:07:57 UTC (rev 7019) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/ExceptionCondition.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. - * See LICENCE file for licencing information. - * - * Created on 2010-02-18 - * Author: K. Benedyczak <go...@ma...> - */ - -package eu.unicore.helputil.generic; - -/** - * Specifies matching of an individual Exception - * @author golbi - */ -public class ExceptionCondition -{ - public static enum Position {FIRST, LAST, ANY}; - - /** - * Used by causedBy to specify the place in sequence of exceptions in stack of causes. - */ - private String ruleId; - - /** - * Exception class name - */ - private String className; - /** - * Reg exp which must match the exception's getMessage() - */ - private String msgRegExp; - - //Future - rather not required by now - //private String causedBy; - - /** - * Means that in the stack trace there must be NO exception matching the one described here. - */ - private boolean mustNotContain; - - /** - * Position in the stack of causes. - */ - private Position position; -} Copied: problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/ExceptionCondition.java (from rev 7020, problemutil/trunk/src/main/java/eu/unicore/helputil/generic/ExceptionCondition.java) =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/ExceptionCondition.java (rev 0) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/ExceptionCondition.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. + * See LICENCE file for licencing information. + * + * Created on 2010-02-18 + * Author: K. Benedyczak <go...@ma...> + */ + +package eu.unicore.helputil.generic; + +import java.util.Map; +import java.util.regex.Pattern; + +/** + * Specifies matching of an individual Exception + * @author golbi + */ +public class ExceptionCondition implements Expression +{ + public static enum Position {DEEPEST, TOPMOST, ANY}; + + /** + * Used by causedBy to specify the place in sequence of exceptions in a stack of causes. + */ + private String ruleId; + + /** + * Exception class name + */ + private String className; + /** + * Reg exp which must match the exception's getMessage() + */ + private Pattern msgRegExp; + + /** + * Informs that this exception must be (directly or indirectly) caused by other exception, matched + * by preceding ExceptionCondition. + */ + private String causedBy; + + /** + * Position in the stack of causes. + */ + private Position position; + + + + public ExceptionCondition(String ruleId, String className) + { + this(ruleId, className, Position.ANY, null, null); + } + + public ExceptionCondition(String ruleId, String className, Position position) + { + this(ruleId, className, position, null, null); + } + + public ExceptionCondition(String ruleId, String className, Position position, String msgRegExp) + { + this(ruleId, className, position, msgRegExp, null); + } + + public ExceptionCondition(String ruleId, String className, Position position, String msgRegExp, String causedBy) + { + this.ruleId = ruleId; + this.className = className; + if (msgRegExp != null) + this.msgRegExp = Pattern.compile(msgRegExp); + this.position = position; + this.causedBy = causedBy; + } + + + public boolean evaluate(Throwable error, Map<String, Integer> matched) + { + int matchPos = evaluateInternal(error); + if (matchPos == -1) + return false; + + if (causedBy != null) + { + Integer pos = matched.get(causedBy); + if (pos == null) + return false; + if (pos <= matchPos) + return false; + } + + matched.put(ruleId, matchPos); + return true; + } + + private int evaluateInternal(Throwable error) + { + int pos = 0; + if (position.equals(Position.TOPMOST)) + { + if (!checkSingle(error)) + return -1; + return pos; + } + if (position.equals(Position.DEEPEST)) + { + while (error.getCause() != null) + { + error = error.getCause(); + pos++; + } + if (!checkSingle(error)) + return -1; + return pos; + } + int max = -1; + if (checkSingle(error)) + max = pos; + while(error.getCause() != null) + { + error = error.getCause(); + pos++; + if (checkSingle(error)) + max = pos; + } + + return max; + } + + /** + * Verifies if the single exception fulfills the rules: it's name is correct and message is + * matching the pattern. + * @param e + * @return + */ + private boolean checkSingle(Throwable e) + { + if (className != null && !e.getClass().getName().equals(className)) + return false; + if (msgRegExp != null) + { + String msg = e.getMessage(); + if (msg == null) + return false; + if (!msgRegExp.matcher(msg).matches()) + return false; + } + return true; + } +} + + + Copied: problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/Expression.java (from rev 7020, problemutil/trunk/src/main/java/eu/unicore/helputil/generic/Expression.java) =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/Expression.java (rev 0) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/Expression.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. + * See LICENCE file for licencing information. + * + * Created on 2010-04-29 + * Author: K. Benedyczak <go...@ma...> + */ + +package eu.unicore.helputil.generic; + +import java.util.Map; + +/** + * Interface implemented by logical expressions and atomic expressions. + * @author golbi + */ +public interface Expression +{ + public boolean evaluate(Throwable error, Map<String, Integer> matched); +} Deleted: problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/GenericConditions.java =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/helputil/generic/GenericConditions.java 2010-04-29 11:07:57 UTC (rev 7019) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/GenericConditions.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. - * See LICENCE file for licencing information. - * - * Created on 2010-02-18 - * Author: K. Benedyczak <go...@ma...> - */ - -package eu.unicore.helputil.generic; - -import java.util.List; - - -/** - * Describes conditions for the {@link GenericMatcher} - * @author golbi - */ -public class GenericConditions -{ - public GenericConditions(List<ExceptionCondition> exceptionConditions) - { - //TODO - } - - public GenericConditions(List<ExceptionCondition> exceptionConditions, String defContext) - { - //TODO - } -} Deleted: problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/GenericMatcher.java =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/helputil/generic/GenericMatcher.java 2010-04-29 11:07:57 UTC (rev 7019) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/GenericMatcher.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. - * See LICENCE file for licencing information. - * - * Created on 2010-02-18 - * Author: K. Benedyczak <go...@ma...> - */ - -package eu.unicore.helputil.generic; - -import java.util.Map; - -import eu.unicore.helputil.Matcher; -import eu.unicore.helputil.Problem; - -/** - * Universal matcher which can take care of most common situations. It is configurable - * with the problem which is returned and - * the exception and default context that it should recognize. - * @author golbi - */ -public class GenericMatcher implements Matcher -{ - public GenericMatcher(GenericConditions conditions, Problem problem) - { - //TODO - } - - public String match(Throwable error, Map<String, Object> context) - { - // TODO Auto-generated method stub - return null; - } -} Copied: problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/GenericMatcher.java (from rev 7020, problemutil/trunk/src/main/java/eu/unicore/helputil/generic/GenericMatcher.java) =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/GenericMatcher.java (rev 0) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/GenericMatcher.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. + * See LICENCE file for licencing information. + * + * Created on 2010-02-18 + * Author: K. Benedyczak <go...@ma...> + */ + +package eu.unicore.helputil.generic; + +import java.util.HashMap; +import java.util.Map; + +import eu.unicore.helputil.Matcher; +import eu.unicore.helputil.Problem; + +/** + * Universal matcher which can take care of most common situations. It is configurable + * with a problem which is returned, and expression describing rules and a default context + * that it should recognize. See {@link LogicExpression} and especially {@link ExceptionCondition} for + * details of what can be used as the aforementioned matching rules. + * @author golbi + */ +public class GenericMatcher implements Matcher +{ + private Expression expr; + private Problem p; + private String myCtx; + + public GenericMatcher(Problem problem, Expression conditions, String context) + { + this.expr = conditions; + p = problem; + this.myCtx = context; + } + + public GenericMatcher(Problem problem, Expression conditions) + { + this(problem, conditions, null); + } + + public String match(Throwable error, Map<String, Object> context) + { + if (myCtx != null) + if (!context.containsKey(myCtx)) + return null; + Map<String, Integer> matched = new HashMap<String, Integer>(); + if (expr.evaluate(error, matched)) + return p.getId(); + return null; + } +} Copied: problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/LogicExpression.java (from rev 7020, problemutil/trunk/src/main/java/eu/unicore/helputil/generic/LogicExpression.java) =================================================================== --- problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/LogicExpression.java (rev 0) +++ problemutil/trunk/src/main/java/eu/unicore/problemutil/generic/LogicExpression.java 2010-04-29 17:20:03 UTC (rev 7021) @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2009 ICM Uniwersytet Warszawski All rights reserved. + * See LICENCE file for licencing information. + * + * Created on 2010-04-29 + * Author: K. Benedyczak <go...@ma...> + */ + +package eu.unicore.helputil.generic; + +import java.util.Map; + +/** + * Stores an expression built from {@link ExceptionCondition}s and standard logical operators. + * @author golbi + */ +public class LogicExpression implements Expression +{ + public enum LogicOp {AND, NOT, OR}; + + private LogicOp op; + private Expression arg1, arg2; + + public LogicExpression(LogicOp op, Expression arg1, Expression arg2) + { + this.op = op; + this.arg1 = arg1; + this.arg2 = arg2; + } + public LogicExpression(Expression arg1) + { + this.op = LogicOp.NOT; + this.arg1 = arg1; + } + + public boolean evaluate(Throwable error, Map<String, Integer> context) + { + switch(op) + { + case AND: return arg1.evaluate(error, context) && arg2.evaluate(error, context); + case OR: return arg1.evaluate(error, context) || arg2.evaluate(error, context); + case NOT: + default: + return !arg1.evaluate(error, context); + } + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |