/**
* Copyright 2010 JBoss Inc
*
* Licensed 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.drools.guvnor.server.files;
/*
* Copyright 2005 JBoss Inc
*
* Licensed 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.
*/
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.drools.guvnor.client.common.Snapshot;
/**
* Works out from the path URI what package is being requested.
* Uses Regular expression Pattern matching to recover packagename and version
* it works both with gwt hosted mode and application server standalone.
*
* @author Michael Neale
* @author Fernando Meyer
*/
public class PackageDeploymentURIHelper {
private String version;
private String packageName;
private String assetName = null;
private enum FileType {
UNKNOWN, SOURCE, DOCUMENTATION
}
private FileType fileType = FileType.UNKNOWN;
public PackageDeploymentURIHelper(String uri) throws UnsupportedEncodingException {
new URIProcessor().parseUri( uri );
}
public String getPackageName() {
return packageName;
}
public String getVersion() {
return version;
}
public boolean isLatest() {
return Snapshot.LATEST_SNAPSHOT.equals( version );
}
public boolean isSource() {
return fileType == FileType.SOURCE;
}
public boolean isDocumentation() {
return fileType == FileType.DOCUMENTATION;
}
public String getAssetName() {
return this.assetName;
}
public boolean isAsset() {
return assetName != null;
}
class URIProcessor {
private static final String PDF = ".pdf";
private static final String BPMN = ".bpmn";
private static final String DRL = ".drl";
private String url;
public void parseUri(String uri) throws UnsupportedEncodingException {
url = URLDecoder.decode( uri,
"UTF-8" );
String extension = getFileExtensionIfAny();
setFileTypeIfAny( extension );
stripFileExtensionIfAny( extension );
setPackageOrAssetData();
}
private void setPackageOrAssetData() {
Pattern pattern = Pattern.compile( ".*/(package|asset)/(.*)" );
Matcher matcher = pattern.matcher( url );
if ( matcher.matches() ) {
String result = matcher.group( 2 );
String[] tokens = result.split( "/" );
version = tokens[1];
packageName = tokens[0];
if ( tokens.length == 3 ) {
assetName = tokens[2];
}
}
}
private void setFileTypeIfAny(String extension) {
if ( extension.equals( DRL ) || extension.equals( BPMN ) ) {
fileType = FileType.SOURCE;
} else if ( extension.equals( PDF ) ) {
fileType = FileType.DOCUMENTATION;
}
}
private void stripFileExtensionIfAny(String extension) {
if ( extension.length() > 0 ) {
url = url.substring( 0,
url.length() - extension.length() );
}
}
private String getFileExtensionIfAny() {
if ( isFileType( DRL ) ) {
return DRL;
} else if ( isFileType( BPMN ) ) {
return BPMN;
} else if ( isFileType( PDF ) ) {
return PDF;
}
return "";
}
private boolean isFileType(String extension) {
return url.endsWith( extension );
}
}
}