/** * Get the uri to use for this handle. */ public String getURI(String repository, String handle) { try { return getURI(LinkUtil.createLinkInstance(repository, handle, null, null, null)); } catch (LinkException e) { log.error("can't map [{}] to a uri", handle, e); } return handle; }
/** * Get the repository to use for this uri. */ public String getRepository(String uri) { return this.getMapping(uri).getRepository(); }
/** * The mapping to use for this uri. */ public URI2RepositoryMapping getMapping(String uri) { for (URI2RepositoryMapping mapping : mappings) { if (mapping.matches(uri)) { return mapping; } } return this.getDefaultMapping(); }
@Test public void testGetURIWhenLinkIsNotEditorBinaryLinkAndPrefixHandleIsSet() throws Exception { when(property.getParent()).thenReturn(node); when(node.isNodeType(NodeTypes.Resource.NAME)).thenReturn(false); Link link = new Link(); link.setPath("contact/pepa/image_file"); link.setPropertyName("file"); link.setFileName("fileName"); link.setExtension("ext"); link.setWorkspace("data"); link.setJCRNode(node); URI2RepositoryManager uri2RepositoryManager = new URI2RepositoryManager(); uri2RepositoryManager.addMapping(new URI2RepositoryMapping("/data", "data", "/blabla")); ComponentsTestUtil.setInstance(URI2RepositoryManager.class, uri2RepositoryManager); assertEquals("/contact/pepa/image_file/file/fileName.ext", URI2RepositoryManager.getInstance().getURI(link)); } }
@Override public String transform(Link uuidLink) { String linkStr; if (useURI2RepositoryMapping) { linkStr = getURI2RepositoryManager().getURI(uuidLink); } else { linkStr = getURI2RepositoryManager().getDefaultMapping().getURI(uuidLink); } linkStr += getURISuffix(uuidLink); if (useI18N) { linkStr = localizeURI(linkStr, locale); } linkStr = prefixLink(linkStr); return linkStr; }
/** * Parses provided URI to the link. * * @param link URI representing path to piece of content * @return Link pointing to the content represented by provided URI */ public static Link parseLink(String link) throws LinkException { // ignore context handle if existing link = StringUtils.removeStart(link, MgnlContext.getContextPath()); Matcher matcher = LINK_PATTERN.matcher(link); if (matcher.matches()) { String orgHandle = matcher.group(1); orgHandle = Components.getComponent(I18nContentSupport.class).toRawURI(orgHandle); String workspaceName = getURI2RepositoryManager().getRepository(orgHandle); String handle = getURI2RepositoryManager().getHandle(orgHandle); return createLinkInstance(workspaceName, handle, matcher.group(3), matcher.group(5), matcher.group(7)); } throw new LinkException("can't parse [ " + link + "]"); }
@Test public void getHandleStripsExtensionInclTheDot() throws Exception { // GIVEN // WHEN // THEN assertThat(uri2RepositoryManager.getHandle("/blah.ext"), is("/blah")); assertThat(uri2RepositoryManager.getHandle("/b.l/ah.ext"), is("/b.l/ah")); assertThat(uri2RepositoryManager.getHandle("/bl.ah.ext"), is("/bl.ah")); }
setURI2RepositoryManager(new URI2RepositoryManager());
public URI2RepositoryManager() { mappings = new TreeSet<>(getMappingComparator()); }
/** * Get uri mapping for repo * @return uri mapping for repo */ @Override public String getURIMappingPrefix() { Collection<URI2RepositoryMapping> mappings = uri2RepositoryManager.getMappings(); for (URI2RepositoryMapping mapping : mappings) { if (mapping.getRepository().equals(MediaModule.REPO)) { return mapping.getURIPrefix(); } } return StringUtils.EMPTY; } }
@Test public void testGetURIWhenLinkIsEditorBinaryLinkAndPrefixHandleIsSet() throws Exception { when(property.getParent()).thenReturn(node); when(node.isNodeType(NodeTypes.Resource.NAME)).thenReturn(true); Link link = new Link(); link.setPath("contact/pepa/image_file"); link.setPropertyName("file"); link.setFileName("fileName"); link.setExtension("ext"); link.setWorkspace("data"); link.setProperty(property); link.setJCRNode(node); URI2RepositoryManager uri2RepositoryManager = new URI2RepositoryManager(); uri2RepositoryManager.addMapping(new URI2RepositoryMapping("/data", "data", "/blabla")); ComponentsTestUtil.setInstance(URI2RepositoryManager.class, uri2RepositoryManager); assertEquals("/data/contact/pepa/image_file/file/fileName.ext", URI2RepositoryManager.getInstance().getURI(link)); }
/** * {@inheritDoc} */ @Override public String transform(Link uuidLink) { String linkStr; if (useURI2RepositoryMapping) { linkStr = getURI2RepositoryManager().getURI(uuidLink); } else { linkStr = getURI2RepositoryManager().getDefaultMapping().getURI(uuidLink); } linkStr += getURISuffix(uuidLink); if (useI18N) { linkStr = Components.getComponent(I18nContentSupport.class).toI18NURI(linkStr); } linkStr = prefixLink(linkStr); return linkStr; }
public String linkPrefix(Node content) { if (!MgnlContext.isWebContext()) { return MgnlContext.getContextPath(); } String fullLinkToPage = link(content); String pagePath = Components.getComponent(URI2RepositoryManager.class).getURI(LinkUtil.createLinkInstance(content)); int ndx = fullLinkToPage.length(); for (int cnt = StringUtils.countMatches(pagePath, "/"); cnt > 0; cnt--) { ndx = fullLinkToPage.lastIndexOf('/', ndx - 1); } return fullLinkToPage.substring(0, ndx); }
/** * Get the handle for this uri. */ public String getHandle(String uri) { return this.getMapping(uri).getHandle(uri); }
public String getURI(Link uuidLink) { for (URI2RepositoryMapping mapping : mappings) { if (StringUtils.equals(mapping.getRepository(), uuidLink.getWorkspace()) && (uuidLink.getPath().startsWith(mapping.getHandlePrefix()) || uuidLink.isEditorBinaryLink())) { return mapping.getURI(uuidLink); } } return this.getDefaultMapping().getURI(uuidLink); }
URI2RepositoryMapping mapping = uri2RepositoryManager.getMapping(uri);
@Before public void setUp() { request = mock(HttpServletRequest.class); mapping = mock(URI2RepositoryMapping.class); URI2RepositoryManager uri2RepositoryManager = mock(URI2RepositoryManager.class); filter = new RepositoryMappingFilter(uri2RepositoryManager); state = new AggregationState(); state.setCharacterEncoding("UTF-8"); MockWebContext ctx = new MockWebContext(); ctx.setAggregationState(state); when(uri2RepositoryManager.getMapping(anyString())).thenReturn(mapping); MgnlContext.setInstance(ctx); }