Add real-time suggestion sample using a service with non-void return type. Rename the weather-webapp sample.

git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1127833 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
fmoga 2011-05-26 08:55:55 +00:00
parent 3b7fe3acfa
commit b120b4af2d
27 changed files with 530 additions and 3 deletions

View file

@ -27,10 +27,10 @@
</parent> </parent>
<groupId>org.apache.tuscany.sca</groupId> <groupId>org.apache.tuscany.sca</groupId>
<artifactId>sample-binding-comet-weather-webapp</artifactId> <artifactId>sample-binding-comet-multiple-response-webapp</artifactId>
<packaging>war</packaging> <packaging>war</packaging>
<version>1.0</version> <version>1.0</version>
<name>Apache Tuscany SCA Sample binding.comet Weather Webapp</name> <name>Apache Tuscany SCA Sample binding.comet Multiple Response Webapp</name>
<dependencies> <dependencies>
<dependency> <dependency>

View file

@ -36,7 +36,8 @@
<activeByDefault>true</activeByDefault> <activeByDefault>true</activeByDefault>
</activation> </activation>
<modules> <modules>
<module>weather-webapp</module> <module>single-response-webapp</module>
<module>multiple-response-webapp</module>
<module>pubsub-webapp</module> <module>pubsub-webapp</module>
<module>chat-webapp</module> <module>chat-webapp</module>
</modules> </modules>

View file

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
* 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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-samples</artifactId>
<version>2.0-SNAPSHOT</version>
<relativePath>../../../pom.xml</relativePath>
</parent>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>sample-binding-comet-single-response-webapp</artifactId>
<packaging>war</packaging>
<version>1.0</version>
<name>Apache Tuscany SCA Sample binding.comet Single Response Webapp</name>
<dependencies>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-comet-runtime</artifactId>
<version>2.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-base-runtime-pom</artifactId>
<version>2.0-SNAPSHOT</version>
<type>pom</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>r09</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
</dependencies>
</project>

View file

@ -0,0 +1,22 @@
package org.apache.tuscany.sca.sample.comet;
import java.io.Serializable;
public class Country implements Serializable {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
}

View file

@ -0,0 +1,12 @@
package org.apache.tuscany.sca.sample.comet;
import java.util.List;
import org.oasisopen.sca.annotation.Remotable;
@Remotable
public interface CountryRepository {
List<Country> getStartingWith(String text);
}

View file

@ -0,0 +1,64 @@
package org.apache.tuscany.sca.sample.comet;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.oasisopen.sca.ComponentContext;
import org.oasisopen.sca.annotation.Constructor;
import org.oasisopen.sca.annotation.Context;
import org.oasisopen.sca.annotation.EagerInit;
import org.oasisopen.sca.annotation.Init;
import org.oasisopen.sca.annotation.Property;
import org.oasisopen.sca.annotation.Scope;
import org.oasisopen.sca.annotation.Service;
@EagerInit
@Scope("COMPOSITE")
@Service(CountryRepository.class)
public class CountryRepositoryImpl implements CountryRepository {
@Context
protected ComponentContext context;
private String fileName;
private List<Country> countries;
@Constructor
public CountryRepositoryImpl(@Property(name = "fileName") String fileName) {
this.fileName = fileName;
countries = new ArrayList<Country>();
}
@Init
public void start() {
try {
BufferedReader reader = new BufferedReader(new FileReader(fileName));
String line;
while ((line = reader.readLine()) != null) {
Country c = new Country();
c.setName(line);
countries.add(c);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public List<Country> getStartingWith(String text) {
List<Country> result = new ArrayList<Country>();
for (Country c : countries) {
if (c.getName().toLowerCase().startsWith(text.toLowerCase())) {
result.add(c);
}
}
return result;
}
}

View file

@ -0,0 +1,12 @@
package org.apache.tuscany.sca.sample.comet;
import java.util.List;
import org.oasisopen.sca.annotation.Remotable;
@Remotable
public interface CountryService {
List<Country> getCountriesStartingWith(String text);
}

View file

@ -0,0 +1,18 @@
package org.apache.tuscany.sca.sample.comet;
import java.util.List;
import org.oasisopen.sca.annotation.Reference;
import org.oasisopen.sca.annotation.Service;
@Service(CountryService.class)
public class CountryServiceImpl implements CountryService {
@Reference
protected CountryRepository repository;
@Override
public List<Country> getCountriesStartingWith(String text) {
return repository.getStartingWith(text);
}
}

View file

@ -0,0 +1,195 @@
Afghanistan
Albania
Algeria
Andorra
Angola
Antigua & Barbuda
Argentina
Armenia
Australia
Austria
Azerbaijan
Bahamas
Bahrain
Bangladesh
Barbados
Belarus
Belgium
Belize
Benin
Bhutan
Bolivia
Bosnia & Herzegovina
Botswana
Brazil
Brunei
Bulgaria
Burkina Faso
Burundi
Cambodia
Cameroon
Canada
Cape Verde
Central African Republic
Chad
Chile
China
Colombia
Comoros
Congo
Congo Democratic Republic of
Costa Rica
Cote d'Ivoire
Croatia
Cuba
Cyprus
Czech Republic
Denmark
Djibouti
Dominica
Dominican Republic
Ecuador
East Timor
Egypt
El Salvador
Equatorial Guinea
Eritrea
Estonia
Ethiopia
Fiji
Finland
France
Gabon
Gambia
Georgia
Germany
Ghana
Greece
Grenada
Guatemala
Guinea
Guinea-Bissau
Guyana
Haiti
Honduras
Hungary
Iceland
India
Indonesia
Iran
Iraq
Ireland
Israel
Italy
Jamaica
Japan
Jordan
Kazakhstan
Kenya
Kiribati
Korea North
Korea South
Kosovo
Kuwait
Kyrgyzstan
Laos
Latvia
Lebanon
Lesotho
Liberia
Libya
Liechtenstein
Lithuania
Luxembourg
Macedonia
Madagascar
Malawi
Malaysia
Maldives
Mali
Malta
Marshall Islands
Mauritania
Mauritius
Mexico
Micronesia
Moldova
Monaco
Mongolia
Montenegro
Morocco
Mozambique
Myanmar (Burma)
Namibia
Nauru
Nepal
The Netherlands
New Zealand
Nicaragua
Niger
Nigeria
Norway
Oman
Pakistan
Palau
Palestinian State*
Panama
Papua New Guinea
Paraguay
Peru
The Philippines
Poland
Portugal
Qatar
Romania
Russia
Rwanda
St. Kitts & Nevis
St. Lucia
St. Vincent & The Grenadines
Samoa
San Marino
Sao Tome & Principe
Saudi Arabia
Senegal
Serbia
Seychelles
Sierra Leone
Singapore
Slovakia
Slovenia
Solomon Islands
Somalia
South Africa
Spain
Sri Lanka
Sudan
Suriname
Swaziland
Sweden
Switzerland
Syria
Taiwan
Tajikistan
Tanzania
Thailand
Togo
Tonga
Trinidad & Tobago
Tunisia
Turkey
Turkmenistan
Tuvalu
Uganda
Ukraine
United Arab Emirates
United Kingdom
United States of America
Uruguay
Uzbekistan
Vanuatu
Vatican City (Holy See)
Venezuela
Yemen
Zambia
Zimbabwe

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- * 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. -->
<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
xmlns:sca="http://docs.oasis-open.org/ns/opencsa/sca/200912"
targetNamespace="http://samples" name="Chat">
<component name="CountryServiceComponent">
<implementation.java
class="org.apache.tuscany.sca.sample.comet.CountryServiceImpl" />
<service name="CountryService">
<interface.java interface="org.apache.tuscany.sca.sample.comet.CountryService" />
<tuscany:binding.comet />
</service>
<reference name="repository" target="CountryRepositoryComponent" />
</component>
<component name="CountryRepositoryComponent">
<implementation.java
class="org.apache.tuscany.sca.sample.comet.CountryRepositoryImpl" />
<property name="fileName">/home/fmoga/coding/apache-tuscany/contrib/samples/learning-more/binding-comet/single-response-webapp/src/main/webapp/WEB-INF/countries.txt</property>
</component>
</composite>

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
* 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.
-->
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:j2ee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_3.0.xsd" version="3.0">
<display-name>Apache Tuscany Stock Comet Sample</display-name>
<filter>
<filter-name>tuscany</filter-name>
<filter-class>org.apache.tuscany.sca.host.webapp.TuscanyServletFilter</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>tuscany</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

View file

@ -0,0 +1,69 @@
<!--
* 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.
-->
<html>
<head>
<title>Apache Tuscany Comet Sample</title>
<!-- Tuscany Comet Javascript Toolkit is dependent on jQuery -->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="tuscany-comet-js/org.apache.tuscany.sca.CometComponentContext.js"></script>
<script type="text/javascript">
var user = "";
$(document).ready(function()
{
// Tuscany Comet specific API
SCA.TuscanyComet.connect();
$("#country").keyup(function() {
var text = $("#country").val();
if (text != "") {
SCA.CometComponentContext.CountryService.getCountriesStartingWith(text, callback);
} else {
$("#suggestions").html("");
}
});
$("#country").focus();
});
function callback(response) {
var html = '<ul>';
$.each(response, function(index, country) {
html += '<li>' + country.name + "</li>"
});
html += '</ul>'
$("#suggestions").html(html);
}
</script>
</head>
<body>
<h2>Apache Tuscany Comet Sample</h2>
<h3>Real-time suggestions</h3>
<table>
<tr>
<td>Enter a country name</td>
<td><input type="text" id='country'/></td>
</tr>
</table>
</div>
<div id="suggestions">
</div>
</body>
</html>