1 package org.apache.maven.doxia.site.decoration.inheritance; 2 3 /* 4 * Licensed to the Apache Software Foundation (ASF) under one 5 * or more contributor license agreements. See the NOTICE file 6 * distributed with this work for additional information 7 * regarding copyright ownership. The ASF licenses this file 8 * to you under the Apache License, Version 2.0 (the 9 * "License"); you may not use this file except in compliance 10 * with the License. You may obtain a copy of the License at 11 * 12 * http://www.apache.org/licenses/LICENSE-2.0 13 * 14 * Unless required by applicable law or agreed to in writing, 15 * software distributed under the License is distributed on an 16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 * KIND, either express or implied. See the License for the 18 * specific language governing permissions and limitations 19 * under the License. 20 */ 21 22 import java.net.MalformedURLException; 23 import java.net.URL; 24 25 import org.codehaus.plexus.util.PathTool; 26 27 /** 28 * Utilities that allow conversion of old and new pathes and URLs relative to each other. 29 * 30 * @author <a href="mailto:brett@apache.org">Brett Porter</a> 31 * @author <a href="mailto:henning@apache.org">Henning P. Schmiedehausen</a> 32 * @deprecated this only operates on deprecated classes, it is not used anymore. 33 * @version $Id: PathUtils.java 1058083 2011-01-12 11:34:02Z ltheussl $ 34 */ 35 public abstract class PathUtils 36 { 37 /** 38 * Private constructor. 39 */ 40 private PathUtils() 41 { 42 // do not instantiate 43 } 44 45 /** 46 * <p>convertPath.</p> 47 * 48 * @param oldPath not null 49 * @param newPath not null 50 * @return a PathDescriptor converted by the new path 51 * @throws java.net.MalformedURLException if any 52 */ 53 public static final PathDescriptor convertPath( final PathDescriptor oldPath, final PathDescriptor newPath ) 54 throws MalformedURLException 55 { 56 String relative = getRelativePath( oldPath, newPath ); 57 58 if ( relative == null ) 59 { 60 return oldPath; 61 } 62 63 return new PathDescriptor( relative ); 64 } 65 66 /** 67 * <p>getRelativePath.</p> 68 * 69 * @param oldPathDescriptor not null 70 * @param newPathDescriptor not null 71 * @return a relative path depending if PathDescriptor is a file or a web url. 72 * @see PathTool#getRelativeFilePath(String, String) 73 * @see PathTool#getRelativeWebPath(String, String) 74 */ 75 public static final String getRelativePath( final PathDescriptor oldPathDescriptor, 76 final PathDescriptor newPathDescriptor ) 77 { 78 // Cannot convert from URL to file. 79 if ( oldPathDescriptor.isFile() ) 80 { 81 if ( !newPathDescriptor.isFile() ) 82 { 83 // We want to convert from a file to an URL. This is normally not possible... 84 if ( oldPathDescriptor.isRelative() ) 85 { 86 // unless the old path is a relative path. Then we might convert an existing 87 // site into a new URL using resolvePaths()... 88 return oldPathDescriptor.getPath(); 89 } 90 91 // The old path is not relative. Bail out. 92 return null; 93 } 94 else 95 { 96 // both are files, if either of them is relative, bail out 97 // see DOXIASITETOOLS-29, MSITE-404, PLXUTILS-116 98 if ( oldPathDescriptor.isRelative() || newPathDescriptor.isRelative() ) 99 { 100 return null; 101 } 102 } 103 } 104 105 // Don't optimize to else. This might also be old.isFile && new.isFile ... 106 if ( !oldPathDescriptor.isFile() ) 107 { 108 // URLs, determine if they share protocol and domain info 109 URL oldUrl = oldPathDescriptor.getPathUrl(); 110 URL newUrl = newPathDescriptor.getPathUrl(); 111 112 if ( oldUrl == null || newUrl == null ) 113 { 114 // One of the sites has a strange URL. no relative path possible, bail out. 115 return null; 116 } 117 118 if ( ( newUrl.getProtocol().equalsIgnoreCase( oldUrl.getProtocol() ) ) 119 && ( newUrl.getHost().equalsIgnoreCase( oldUrl.getHost() ) ) 120 && ( newUrl.getPort() == oldUrl.getPort() ) ) 121 { 122 // Both paths point to the same site. So we can use relative paths. 123 124 String oldPath = oldPathDescriptor.getPath(); 125 String newPath = newPathDescriptor.getPath(); 126 127 return PathTool.getRelativeWebPath( newPath, oldPath ); 128 } 129 130 // Different sites. No relative Path possible. 131 return null; 132 } 133 134 // Both Descriptors point to an absolute path. We can build a relative path. 135 String oldPath = oldPathDescriptor.getPath(); 136 String newPath = newPathDescriptor.getPath(); 137 138 if ( oldPath == null || newPath == null ) 139 { 140 // One of the sites has a strange URL. no relative path possible, bail out. 141 return null; 142 } 143 144 return PathTool.getRelativeFilePath( oldPath, newPath ); 145 } 146 }