From 8c81a2bd608bc3ce6428fca5b2fe559994f24b11 Mon Sep 17 00:00:00 2001 From: lresende Date: Mon, 31 Aug 2009 22:47:46 +0000 Subject: Couple simple expertise locator scenario exploring different REST style implementations git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@809773 13f79535-47bb-0310-9956-ffa450edef68 --- .../lresende/sca/samples/expertise-atom/pom.xml | 97 +++++++++++++++ .../java/org/apache/tuscany/expertise/Expert.java | 67 +++++++++++ .../expertise/atom/AtomExpertiseLocator.java | 130 +++++++++++++++++++++ .../tuscany/expertise/atom/ExpertiseLocator.java | 29 +++++ .../apache/tuscany/expertise/launch/Launch.java | 34 ++++++ .../main/resources/META-INF/sca-contribution.xml | 25 ++++ .../src/main/resources/atom.composite | 36 ++++++ .../src/main/resources/atom.composite_diagram | 71 +++++++++++ .../src/main/resources/expertLocator.html | 110 +++++++++++++++++ .../sca/samples/expertise-restfull/pom.xml | 83 +++++++++++++ .../java/org/apache/tuscany/expertise/Expert.java | 64 ++++++++++ .../apache/tuscany/expertise/launch/Launch.java | 34 ++++++ .../tuscany/expertise/restfull/ExpertRegistry.java | 37 ++++++ .../expertise/restfull/ExpertRegistryImpl.java | 92 +++++++++++++++ .../restfull/RestfulExpertiseLocator.java | 100 ++++++++++++++++ .../main/resources/META-INF/sca-contribution.xml | 25 ++++ .../src/main/resources/rest.composite | 34 ++++++ .../src/main/resources/rest.composite_diagram | 71 +++++++++++ 18 files changed, 1139 insertions(+) create mode 100644 sandbox/lresende/sca/samples/expertise-atom/pom.xml create mode 100644 sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/Expert.java create mode 100644 sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/AtomExpertiseLocator.java create mode 100644 sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/ExpertiseLocator.java create mode 100644 sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/launch/Launch.java create mode 100644 sandbox/lresende/sca/samples/expertise-atom/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sandbox/lresende/sca/samples/expertise-atom/src/main/resources/atom.composite create mode 100644 sandbox/lresende/sca/samples/expertise-atom/src/main/resources/atom.composite_diagram create mode 100644 sandbox/lresende/sca/samples/expertise-atom/src/main/resources/expertLocator.html create mode 100644 sandbox/lresende/sca/samples/expertise-restfull/pom.xml create mode 100644 sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/Expert.java create mode 100644 sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/launch/Launch.java create mode 100644 sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistry.java create mode 100644 sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistryImpl.java create mode 100644 sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/RestfulExpertiseLocator.java create mode 100644 sandbox/lresende/sca/samples/expertise-restfull/src/main/resources/META-INF/sca-contribution.xml create mode 100644 sandbox/lresende/sca/samples/expertise-restfull/src/main/resources/rest.composite create mode 100644 sandbox/lresende/sca/samples/expertise-restfull/src/main/resources/rest.composite_diagram (limited to 'sandbox/lresende') diff --git a/sandbox/lresende/sca/samples/expertise-atom/pom.xml b/sandbox/lresende/sca/samples/expertise-atom/pom.xml new file mode 100644 index 0000000000..4cefa601c2 --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-atom/pom.xml @@ -0,0 +1,97 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-tutorial-store + 1.6-SNAPSHOT + ../pom.xml + + sample-expertise-atom + Apache Tuscany SCA ATOM Expertise Locator + + + + org.apache.tuscany.sca + tuscany-sca-api + 1.6-SNAPSHOT + + + + org.apache.tuscany.sca + tuscany-data-api + 1.6-SNAPSHOT + + + + org.apache.tuscany.sca + tuscany-host-embedded + 1.6-SNAPSHOT + + + + org.apache.tuscany.sca + tuscany-implementation-java-runtime + 1.6-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-implementation-widget-runtime-tuscany + 1.6-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-binding-atom-abdera + 1.6-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-binding-atom-js + 1.6-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-binding-http-runtime + 1.6-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-host-tomcat + 1.6-SNAPSHOT + runtime + + + + + ${artifactId} + + + diff --git a/sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/Expert.java b/sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/Expert.java new file mode 100644 index 0000000000..5bc3325a18 --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/Expert.java @@ -0,0 +1,67 @@ +/* + * 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.tuscany.expertise; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import org.apache.tuscany.expertise.Expert; + +public class Expert implements Serializable { + private static final long serialVersionUID = 2026687637313310397L; + + private String id; + private String name; + private String location; + private List expertises = new ArrayList(); + + public Expert() { + + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public List getExpertise() { + return this.expertises; + } + +} diff --git a/sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/AtomExpertiseLocator.java b/sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/AtomExpertiseLocator.java new file mode 100644 index 0000000000..a2fde8f938 --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/AtomExpertiseLocator.java @@ -0,0 +1,130 @@ +/* + * 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.tuscany.expertise.atom; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.tuscany.expertise.Expert; +import org.apache.tuscany.sca.data.collection.Entry; +import org.apache.tuscany.sca.data.collection.NotFoundException; +import org.osoa.sca.annotations.Init; +import org.osoa.sca.annotations.Scope; + +@Scope("COMPOSITE") +public class AtomExpertiseLocator implements ExpertiseLocator { + + private Map experts = new HashMap(); + + @Init + public void init() { + Expert expert; + + expert = new Expert(); + expert.setId("1"); + expert.setName("John Smith"); + expert.setLocation("CA"); + expert.getExpertise().add("SOA"); + expert.getExpertise().add("SCA"); + expert.getExpertise().add("WAS"); + + experts.put(expert.getId(), expert); + + expert = new Expert(); + expert.setId("2"); + expert.setName("Ken Johnson"); + expert.setLocation("NY"); + expert.getExpertise().add("Search"); + + experts.put(expert.getId(), expert); + + expert = new Expert(); + expert.setId("3"); + expert.setName("Mark Smith"); + expert.setLocation("CA"); + expert.getExpertise().add("SCA"); + expert.getExpertise().add("WASCE"); + + experts.put(expert.getId(), expert); + } + + + public Entry[] getAll() { + Entry[] entries = new Entry[experts.size()]; + int i = 0; + for (Map.Entry e: experts.entrySet()) { + entries[i++] = new Entry(e.getKey(), e.getValue()); + } + return entries; + + } + + public Expert get(String key) throws NotFoundException { + Expert item = experts.get(key); + if (item == null) { + throw new NotFoundException(key); + } else { + return item; + } + } + + public String post(String key, Expert item) { + if (key == null) { + int size = experts.entrySet().size() + 1; + key = Integer.toString(size); + item.setId(key); + } + experts.put(key, item); + return key; + } + + public void put(String key, Expert item) throws NotFoundException { + if (!experts.containsKey(key)) { + throw new NotFoundException(key); + } + experts.put(key, item); + } + + public void delete(String key) throws NotFoundException { + if (key == null || key.equals("")) { + experts.clear(); + } else { + Expert expert = experts.remove(key); + if (expert == null) + throw new NotFoundException(key); + } + } + + public Entry[] query(String queryString) { + List> entries = new ArrayList>(); + if (queryString.startsWith("location=")) { + String location = queryString.substring(9); + for (Map.Entry e: experts.entrySet()) { + Expert expert = e.getValue(); + if (expert.getLocation().equals(location)) { + entries.add(new Entry(e.getKey(), e.getValue())); + } + } + } + return entries.toArray(new Entry[entries.size()]); + } +} diff --git a/sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/ExpertiseLocator.java b/sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/ExpertiseLocator.java new file mode 100644 index 0000000000..84683528cc --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/atom/ExpertiseLocator.java @@ -0,0 +1,29 @@ +/* + * 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.tuscany.expertise.atom; + +import org.apache.tuscany.expertise.Expert; +import org.apache.tuscany.sca.data.collection.Collection; +import org.osoa.sca.annotations.Remotable; + +@Remotable +public interface ExpertiseLocator extends Collection { + +} diff --git a/sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/launch/Launch.java b/sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/launch/Launch.java new file mode 100644 index 0000000000..eb82100092 --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-atom/src/main/java/org/apache/tuscany/expertise/launch/Launch.java @@ -0,0 +1,34 @@ +/* + * 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.tuscany.expertise.launch; + +import org.apache.tuscany.sca.host.embedded.SCADomain; + +public class Launch { + public static void main(String[] args) throws Exception { + System.out.println("Starting ..."); + SCADomain scaDomain = SCADomain.newInstance("atom.composite"); + System.out.println("atom.composite ready for big business !!!"); + System.in.read(); + System.out.println("Stopping ..."); + scaDomain.close(); + System.out.println(); + } +} diff --git a/sandbox/lresende/sca/samples/expertise-atom/src/main/resources/META-INF/sca-contribution.xml b/sandbox/lresende/sca/samples/expertise-atom/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..c1e9be425c --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-atom/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/sandbox/lresende/sca/samples/expertise-atom/src/main/resources/atom.composite b/sandbox/lresende/sca/samples/expertise-atom/src/main/resources/atom.composite new file mode 100644 index 0000000000..75d04f1fe4 --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-atom/src/main/resources/atom.composite @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sandbox/lresende/sca/samples/expertise-atom/src/main/resources/atom.composite_diagram b/sandbox/lresende/sca/samples/expertise-atom/src/main/resources/atom.composite_diagram new file mode 100644 index 0000000000..50c1ccf578 --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-atom/src/main/resources/atom.composite_diagram @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sandbox/lresende/sca/samples/expertise-atom/src/main/resources/expertLocator.html b/sandbox/lresende/sca/samples/expertise-atom/src/main/resources/expertLocator.html new file mode 100644 index 0000000000..22579cb0ce --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-atom/src/main/resources/expertLocator.html @@ -0,0 +1,110 @@ + + + +Expert Locator + + + + + + + + +

Expertise Locator

+
+

Add new Expert

+
+ Name
+
+ Location
+
+ Expertise
+ separate multiple values with commas (,)
+
+ +
+
+ +
+

Experts

+
+
+
+
+
+ + + diff --git a/sandbox/lresende/sca/samples/expertise-restfull/pom.xml b/sandbox/lresende/sca/samples/expertise-restfull/pom.xml new file mode 100644 index 0000000000..32decad47f --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-restfull/pom.xml @@ -0,0 +1,83 @@ + + + + 4.0.0 + + org.apache.tuscany.sca + tuscany-tutorial-store + 1.6-SNAPSHOT + ../pom.xml + + sample-expertise-restfull + Apache Tuscany SCA RESTFull Expertise Locator + + + + org.apache.tuscany.sca + tuscany-sca-api + 1.6-SNAPSHOT + + + + org.apache.tuscany.sca + tuscany-data-api + 1.6-SNAPSHOT + + + + org.apache.tuscany.sca + tuscany-host-embedded + 1.6-SNAPSHOT + + + + org.apache.tuscany.sca + tuscany-implementation-java-runtime + 1.6-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-binding-http-runtime + 1.6-SNAPSHOT + runtime + + + + org.apache.tuscany.sca + tuscany-host-tomcat + 1.6-SNAPSHOT + runtime + + + + javax.servlet + servlet-api + 2.5 + provided + + + + + ${artifactId} + + + diff --git a/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/Expert.java b/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/Expert.java new file mode 100644 index 0000000000..61ac1c12b7 --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/Expert.java @@ -0,0 +1,64 @@ +/* + * 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.tuscany.expertise; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +public class Expert implements Serializable { + private static final long serialVersionUID = 2026687637313310397L; + + private String id; + private String name; + private String location; + private List expertises = new ArrayList(); + + public Expert() { + + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public List getExpertise() { + return this.expertises; + } +} diff --git a/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/launch/Launch.java b/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/launch/Launch.java new file mode 100644 index 0000000000..306abd5465 --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/launch/Launch.java @@ -0,0 +1,34 @@ +/* + * 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.tuscany.expertise.launch; + +import org.apache.tuscany.sca.host.embedded.SCADomain; + +public class Launch { + public static void main(String[] args) throws Exception { + System.out.println("Starting ..."); + SCADomain scaDomain = SCADomain.newInstance("rest.composite"); + System.out.println("rest.composite ready for big business !!!"); + System.in.read(); + System.out.println("Stopping ..."); + scaDomain.close(); + System.out.println(); + } +} diff --git a/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistry.java b/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistry.java new file mode 100644 index 0000000000..1b90df36d2 --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistry.java @@ -0,0 +1,37 @@ +/* + * 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.tuscany.expertise.restfull; + +import java.util.List; + +import org.apache.tuscany.expertise.Expert; +import org.osoa.sca.annotations.Remotable; + +@Remotable +public interface ExpertRegistry { + + void addExpert(Expert expert); + + void removeExpert(Expert expert); + + List getExperts(); + + List getExpertsByExpertise(String expertise); +} \ No newline at end of file diff --git a/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistryImpl.java b/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistryImpl.java new file mode 100644 index 0000000000..bf7b2ea03e --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/ExpertRegistryImpl.java @@ -0,0 +1,92 @@ +/* + * 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.tuscany.expertise.restfull; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.tuscany.expertise.Expert; +import org.osoa.sca.annotations.Init; +import org.osoa.sca.annotations.Service; + +@Service(ExpertRegistry.class) +public class ExpertRegistryImpl implements ExpertRegistry { + private List experts = new ArrayList(); + + public ExpertRegistryImpl() { + + } + + @Init + public void init() { + Expert expert; + + expert = new Expert(); + expert.setId("1"); + expert.setName("John Smith"); + expert.setLocation("CA"); + expert.getExpertise().add("SOA"); + expert.getExpertise().add("SCA"); + expert.getExpertise().add("WAS"); + + experts.add(expert); + + expert = new Expert(); + expert.setId("2"); + expert.setName("Ken Johnson"); + expert.setLocation("NY"); + expert.getExpertise().add("Search"); + + experts.add(expert); + + expert = new Expert(); + expert.setId("3"); + expert.setName("Mark Smith"); + expert.setLocation("CA"); + expert.getExpertise().add("SCA"); + expert.getExpertise().add("WASCE"); + + experts.add(expert); + } + + public void addExpert(Expert expert) { + experts.add(expert); + } + + public void removeExpert(Expert expert) { + experts.remove(expert); + } + + public List getExperts() { + return experts; + } + + public List getExpertsByExpertise(String expertise) { + List expertsByExpertise = new ArrayList(); + + for (Expert expert : experts) { + if (expert.getExpertise().contains(expertise)) { + expertsByExpertise.add(expert); + } + } + + return expertsByExpertise; + } +} diff --git a/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/RestfulExpertiseLocator.java b/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/RestfulExpertiseLocator.java new file mode 100644 index 0000000000..ea3915ccb5 --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-restfull/src/main/java/org/apache/tuscany/expertise/restfull/RestfulExpertiseLocator.java @@ -0,0 +1,100 @@ +/* + * 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.tuscany.expertise.restfull; + +import java.io.IOException; +import java.net.URLDecoder; +import java.util.List; + +import javax.servlet.Servlet; +import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.tuscany.expertise.Expert; +import org.osoa.sca.annotations.Reference; +import org.osoa.sca.annotations.Scope; +import org.osoa.sca.annotations.Service; + +@Service(Servlet.class) +@Scope("COMPOSITE") +public class RestfulExpertiseLocator extends HttpServlet implements Servlet { + + private static final long serialVersionUID = 4021701701436888369L; + + @Reference + protected ExpertRegistry experts; + + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String path = URLDecoder.decode(getRequestPath(request), "UTF-8"); + String expertise = path.substring(1); + + if (expertise != null && expertise.length() > 0 ) { + printExperts(response.getOutputStream(), experts.getExpertsByExpertise(expertise)); + } else { + printExperts(response.getOutputStream(), experts.getExperts()); + } + + } + + + private void printExperts(ServletOutputStream out, List experts) throws IOException { + out.print(""); + out.print("

Expertise Locator

"); + + if (experts.size() > 0) { + for (Expert expert: experts) { + out.print("Location: " + expert.getLocation() + " - " + expert.getName() +" ==> "); + for (String expertise : expert.getExpertise()) { + out.print(expertise + ";"); + } + out.print("
"); + } + } else { + out.println("No experts found"); + } + out.print(""); + } + + /** + * + * @param request + * @return + */ + private static String getRequestPath(HttpServletRequest request) { + // Get the request path + String contextPath = request.getContextPath(); + String servletPath = request.getServletPath(); + String requestURI = request.getRequestURI(); + + int contextPathLength = request.getContextPath().length(); + int servletPathLenght = servletPath.contains(contextPath) ? servletPath.length() - contextPath.length() : servletPath.length(); + + String requestPath = requestURI.substring(contextPathLength + servletPathLenght); + + return requestPath; + } + + +} diff --git a/sandbox/lresende/sca/samples/expertise-restfull/src/main/resources/META-INF/sca-contribution.xml b/sandbox/lresende/sca/samples/expertise-restfull/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..96d2cc3c66 --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-restfull/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,25 @@ + + + + + + + \ No newline at end of file diff --git a/sandbox/lresende/sca/samples/expertise-restfull/src/main/resources/rest.composite b/sandbox/lresende/sca/samples/expertise-restfull/src/main/resources/rest.composite new file mode 100644 index 0000000000..50f19a7c79 --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-restfull/src/main/resources/rest.composite @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sandbox/lresende/sca/samples/expertise-restfull/src/main/resources/rest.composite_diagram b/sandbox/lresende/sca/samples/expertise-restfull/src/main/resources/rest.composite_diagram new file mode 100644 index 0000000000..05dae0d547 --- /dev/null +++ b/sandbox/lresende/sca/samples/expertise-restfull/src/main/resources/rest.composite_diagram @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3