| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ |
| package org.apache.lenya.cms.linking; |
| |
| import java.net.MalformedURLException; |
| import java.util.StringTokenizer; |
| |
| import org.apache.lenya.util.Query; |
| |
| /** |
| * A link to a document. |
| */ |
| public class Link { |
| |
| protected static final String PAIR_DELIMITER = ","; |
| protected static final String KEY_VALUE_DELIMITER = "="; |
| |
| private String uuid; |
| private String language; |
| private String revision; |
| private String area; |
| private String pubId; |
| |
| /** |
| * Ctor. |
| */ |
| public Link() { |
| } |
| |
| /** |
| * Ctor. |
| * @param linkUri The link URI. |
| * @throws MalformedURLException if the URI doesn't represent a link. |
| */ |
| public Link(String linkUri) throws MalformedURLException { |
| |
| if (!linkUri.startsWith(LinkResolver.SCHEME + ":")) { |
| throw new MalformedURLException("The string [" + linkUri + "] is not a valid link URI!"); |
| } |
| |
| StringTokenizer schemeAndPath = new StringTokenizer(linkUri, ":"); |
| schemeAndPath.nextToken(); |
| String path = schemeAndPath.nextToken(); |
| |
| if (path.indexOf(PAIR_DELIMITER) > -1) { |
| int firstDelimiterIndex = path.indexOf(PAIR_DELIMITER); |
| this.uuid = path.substring(0, firstDelimiterIndex); |
| String pathQueryString = path.substring(firstDelimiterIndex + 1); |
| Query query = new Query(pathQueryString, PAIR_DELIMITER, KEY_VALUE_DELIMITER); |
| this.pubId = query.getValue("pub"); |
| this.area = query.getValue("area"); |
| this.language = query.getValue("lang"); |
| this.revision = query.getValue("rev"); |
| } else { |
| this.uuid = path; |
| } |
| } |
| |
| /** |
| * @return The area. |
| */ |
| public String getArea() { |
| return area; |
| } |
| |
| /** |
| * @param area The area. |
| */ |
| public void setArea(String area) { |
| this.area = area; |
| } |
| |
| /** |
| * @return The language. |
| */ |
| public String getLanguage() { |
| return language; |
| } |
| |
| /** |
| * @param language The language. |
| */ |
| public void setLanguage(String language) { |
| this.language = language; |
| } |
| |
| /** |
| * @return The publication ID. |
| */ |
| public String getPubId() { |
| return pubId; |
| } |
| |
| /** |
| * @param pubId The publication ID. |
| */ |
| public void setPubId(String pubId) { |
| this.pubId = pubId; |
| } |
| |
| /** |
| * @return The revision. |
| */ |
| public String getRevision() { |
| return revision; |
| } |
| |
| /** |
| * @param revision The revision. |
| */ |
| public void setRevision(String revision) { |
| this.revision = revision; |
| } |
| |
| /** |
| * @return The UUID. |
| */ |
| public String getUuid() { |
| return uuid; |
| } |
| |
| /** |
| * @param uuid The UUID. |
| */ |
| public void setUuid(String uuid) { |
| this.uuid = uuid; |
| } |
| |
| /** |
| * @return The link URI. |
| */ |
| public String getUri() { |
| String uri = LinkResolver.SCHEME + ":"; |
| if (this.uuid != null) { |
| uri = uri + this.uuid; |
| } |
| if (this.language != null) { |
| uri = uri + ",lang=" + this.language; |
| } |
| if (this.area != null) { |
| uri = uri + ",area=" + this.area; |
| } |
| if (this.pubId != null) { |
| uri = uri + ",pub=" + this.pubId; |
| } |
| if (this.revision != null) { |
| uri = uri + ",rev=" + this.revision; |
| } |
| return uri; |
| } |
| |
| public boolean equals(Object obj) { |
| if (!getClass().isInstance(obj)) { |
| return false; |
| } |
| return ((Link) obj).getUri().equals(getUri()); |
| } |
| |
| public int hashCode() { |
| return getUri().hashCode(); |
| } |
| |
| public String toString() { |
| return getUri(); |
| } |
| |
| } |