package edu.asu.spring.quadriga.domain.resolver.impl; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import edu.asu.spring.quadriga.domain.resolver.IProjectHandleResolver; import edu.asu.spring.quadriga.domain.resolver.Status; /** * A ProjectHandleResolver describes how original handles referenced in creation * events can be resolved to the actual text in a repository or website. E.g. if * the original handle points to a XHTML version in a repository that has a * representation on a website and there is a direct link between handle and * presentation that can be expressed using RegEx, this class can be used. * * For example: * * Handle is: http://my.handle.org/handle/123/456 Presentation is: * http://my.website.org/123/456 * * Handle pattern could now be: <code>(/[0-9]+/[0-9]+$)</code> Resolved handle * pattern: <code>http://my.website.org/{0}</code> * * <code>{0}</code> refers to the 1. group defined in the pattern and will be * replace with the content of the group. * * * @author jdamerow * */ public class ProjectHandleResolver implements IProjectHandleResolver { private String id; private String projectName; private String description; private String projectUrl; private String username; /** * The resolved handle pattern is the pattern that specifies how the * resolved handle should be build. It should use <code>{n}</code> to refer * to groups in the pattern specified in handlePattern. */ private String resolvedHandlePattern; /** * The pattern that describes what parts of the original handle should be * used in the resolved handle. */ private String handlePattern; private String handleExample; private String resolvedHandleExample; private Status validation = Status.NOT_RUN; /* * (non-Javadoc) * * @see * edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver#getId * () */ @Override public String getId() { return id; } /* * (non-Javadoc) * * @see * edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver#setId * (java.lang.String) */ @Override public void setId(String id) { this.id = id; } /* * (non-Javadoc) * * @see edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver# * getProjectName() */ @Override public String getProjectName() { return projectName; } /* * (non-Javadoc) * * @see edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver# * setProjectName(java.lang.String) */ @Override public void setProjectName(String projectName) { this.projectName = projectName; } /* * (non-Javadoc) * * @see edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver# * getDescription() */ @Override public String getDescription() { return description; } /* * (non-Javadoc) * * @see edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver# * setDescription(java.lang.String) */ @Override public void setDescription(String description) { this.description = description; } /* * (non-Javadoc) * * @see edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver# * getProjectUrl() */ @Override public String getProjectUrl() { return projectUrl; } /* * (non-Javadoc) * * @see edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver# * setProjectUrl(java.lang.String) */ @Override public void setProjectUrl(String projectUrl) { this.projectUrl = projectUrl; } @Override public String getUsername() { return username; } @Override public void setUsername(String username) { this.username = username; } /* * (non-Javadoc) * * @see edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver# * getResolvedHandlePattern() */ @Override public String getResolvedHandlePattern() { return resolvedHandlePattern; } /* * (non-Javadoc) * * @see edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver# * setResolvedHandlePattern(java.lang.String) */ @Override public void setResolvedHandlePattern(String resolvedHandlePattern) { this.resolvedHandlePattern = resolvedHandlePattern; } /* * (non-Javadoc) * * @see edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver# * getHandlePattern() */ @Override public String getHandlePattern() { return handlePattern; } /* * (non-Javadoc) * * @see edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver# * setHandlePattern(java.lang.String) */ @Override public void setHandlePattern(String handlePattern) { this.handlePattern = handlePattern; } /* * (non-Javadoc) * * @see edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver# * getHandleExample() */ @Override public String getHandleExample() { return handleExample; } /* * (non-Javadoc) * * @see edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver# * setHandleExample(java.lang.String) */ @Override public void setHandleExample(String handleExample) { this.handleExample = handleExample; } @Override public String getResolvedHandleExample() { return resolvedHandleExample; } @Override public void setResolvedHandleExample(String resolvedHandleExample) { this.resolvedHandleExample = resolvedHandleExample; } /* * (non-Javadoc) * * @see edu.asu.spring.quadriga.domain.resolver.impl.IProjectHandleResolver# * buildResolvedHandle(java.lang.String) */ @Override public String buildResolvedHandle(String handle) { Pattern pattern = Pattern.compile(handlePattern); Matcher matcher = pattern.matcher(handle); List<String> groups = new ArrayList<String>(); while (matcher.find()) { for (int i = 0; i < matcher.groupCount(); i++) { groups.add(matcher.group(i + 1)); } } String resolvedHandle = resolvedHandlePattern; for (int i = 0; i < groups.size(); i++) { resolvedHandle = resolvedHandle.replace("{" + i + "}", groups.get(i)); } return resolvedHandle; } @Override public Status getValidation() { return validation; } @Override public void setValidation(Status validation) { this.validation = validation; } }