blob: 1c9e20f3997558d648d97d8b156b4ecdd055b7d1 [file] [log] [blame]
/*
* 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.netbeans.modules.websvc.saas.model;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.netbeans.modules.websvc.saas.model.jaxb.Method;
import org.netbeans.modules.websvc.saas.model.wadl.Application;
import org.netbeans.modules.websvc.saas.model.wadl.Resource;
import org.netbeans.modules.websvc.saas.util.SaasUtil;
import org.openide.util.Exceptions;
/**
*
* @author nam
*/
public class WadlSaasMethod extends SaasMethod {
private static final String GET = "GET";
private static final String POST = "POST";
private static final String PUT = "PUT";
private static final String DELETE = "DELETE";
private Resource[] path;
private WadlSaasResource parent;
private org.netbeans.modules.websvc.saas.model.wadl.Method wadlMethod;
private String name;
private String displayName;
public WadlSaasMethod(WadlSaas wadlSaas, Method method) {
super(wadlSaas, method);
}
public WadlSaasMethod(WadlSaasResource parent, org.netbeans.modules.websvc.saas.model.wadl.Method wadlMethod) {
this(parent.getSaas(), (Method) null);
this.parent = parent;
this.wadlMethod = wadlMethod;
}
@Override
public String getName() {
if (getMethod() == null) {
if (name == null) {
name = wadlMethod.getId();
if (name == null) {
name = wadlMethod.getName();
Set<String> medias = null;
if (GET.equals(name)) {
medias = new HashSet<String>();
for( org.netbeans.modules.websvc.saas.model.wadl.Response
response :wadlMethod.getResponse())
{
medias.addAll(SaasUtil.getMediaTypes(
response.getRepresentation()));
}
} else if (PUT.equals(name) || POST.equals(name)) {
medias = SaasUtil.getMediaTypes(
wadlMethod.getRequest().getRepresentation());
}
name = name.toLowerCase();
if (medias != null && medias.size() > 0) {
for (String m : medias) {
name += "_" + m;
}
name = name.replaceAll("\\W", "_").replaceAll("_+", "_").replaceAll("_$", "");
}
}
}
return name;
}
return super.getName();
}
@Override
public String getDisplayName() {
if (getMethod() == null) {
if (displayName == null) {
displayName = wadlMethod.getId();
if (displayName == null) {
displayName = wadlMethod.getName();
Set<String> medias = null;
if (GET.equals(displayName)) {
medias = new HashSet<String>();
for( org.netbeans.modules.websvc.saas.model.wadl.Response
response :wadlMethod.getResponse())
{
medias.addAll(SaasUtil.getMediaTypes(
response.getRepresentation()));
}
} else if (PUT.equals(displayName) || POST.equals(displayName)) {
medias = SaasUtil.getMediaTypes(
wadlMethod.getRequest().getRepresentation());
}
if (medias != null && medias.size() > 0) {
displayName += medias;
}
}
}
return displayName;
}
return super.getDisplayName();
}
@Override
public WadlSaas getSaas() {
return (WadlSaas) super.getSaas();
}
public WadlSaasResource getParentResource() {
return parent;
}
public Resource[] getResourcePath() {
Application wadl = null;
try {
wadl = getSaas().getWadlModel();
} catch (IOException e) {
Exceptions.printStackTrace(e);
return new Resource[0];
}
if (path == null || path.length == 0) {
List<Resource> result = new ArrayList<Resource>();
if (super.getMethod() == null) {
WadlSaasResource current = getParentResource();
while (current != null) {
result.add(0, current.getResource());
current = current.getParent();
}
} else {
for(org.netbeans.modules.websvc.saas.model.wadl.Resources wadlResources :
wadl.getResources())
{
for (Resource r : wadlResources.getResource()) {
findPathToMethod(r, result);
if (r.getMethodOrResource().contains(getWadlMethod())) {
break;
}
}
}
}
path = result.toArray(new Resource[result.size()]);
}
return path;
}
private void findPathToMethod(Resource current, List<Resource> resultPath) {
if (current.getMethodOrResource().contains(getWadlMethod())) {
resultPath.add(current);
return;
}
for (Object o : current.getMethodOrResource()) {
if (o instanceof Resource) {
findPathToMethod((Resource) o, resultPath);
if (resultPath.size() > 0) {
break;
}
}
}
resultPath.add(0, current);
}
public org.netbeans.modules.websvc.saas.model.wadl.Method getWadlMethod() {
if (wadlMethod == null) {
if (getHref() != null && getHref().length() > 0) {
try {
if (getHref().charAt(0) == '/') {
wadlMethod = SaasUtil.wadlMethodFromXPath(getSaas().getWadlModel(), getHref());
} else {
wadlMethod = SaasUtil.wadlMethodFromIdRef(getSaas().getWadlModel(), getHref());
}
} catch (IOException ioe) {
Exceptions.printStackTrace(ioe);
}
} else {
throw new IllegalArgumentException("Element method " + getName() + " should define attribute 'href'");
}
}
return wadlMethod;
}
public String toString() {
return getDisplayName();
}
}