Cleaning up GData binding implementation and fixing issue with retrieving Picassa feed

git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@708460 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
lresende 2008-10-28 06:34:31 +00:00
parent 74f1b78443
commit d7da0b211d
48 changed files with 128 additions and 3463 deletions

View file

@ -20,13 +20,14 @@ package org.apache.tuscany.sca.binding.gdata.collection;
import java.io.InputStream;
import org.osoa.sca.annotations.Remotable; // import
// org.apache.abdera.model.Entry;
import org.osoa.sca.annotations.Remotable;
import com.google.gdata.data.Entry;
/**
* Provides access to a collection of resources using Atom.
*
* @version $Rev$ $Date$
*/
@Remotable
public interface MediaCollection extends Collection {

View file

@ -24,6 +24,7 @@ package org.apache.tuscany.sca.binding.gdata.collection;
*
* @version $Rev$ $Date$
*/
public class NotFoundException extends Exception {
private static final long serialVersionUID = -5046027674128627383L;
@ -41,5 +42,4 @@ public class NotFoundException extends Exception {
public NotFoundException(String message, Throwable cause) {
super(message, cause);
}
}

View file

@ -46,6 +46,8 @@ import com.google.gdata.util.ServiceException;
/**
* Invoker for the GData binding.
*
* @version $Rev$ $Date$
*/
class GdataBindingInvoker implements Invoker, DataExchangeSemantics {
@ -71,6 +73,11 @@ class GdataBindingInvoker implements Invoker, DataExchangeSemantics {
}
public boolean allowsPassByReference() {
return true;
}
public Message invoke(Message msg) {
// Shouldn't get here, as the only supported methods are
// defined in the ResourceCollection interface, and implemented
@ -83,6 +90,7 @@ class GdataBindingInvoker implements Invoker, DataExchangeSemantics {
* Get operation invoker
*/
public static class GetInvoker extends GdataBindingInvoker {
public GetInvoker(Operation operation,
String uri,
GoogleService googleService,
@ -145,23 +153,19 @@ class GdataBindingInvoker implements Invoker, DataExchangeSemantics {
// Expect an GData entry
System.out.println("[Debug Info]GdataBindingInvoker.PostInvoker --- supportsFeedEntries: " + provider
.supportsFeedEntries());
System.out.println("[Debug Info]GdataBindingInvoker.PostInvoker --- supportsFeedEntries: " + provider.supportsFeedEntries());
feedEntry = (com.google.gdata.data.Entry)args[0];
System.out.println("[Debug Info]GdataBindingInvoker.PostInvoker --- feedEntry title: " + feedEntry
.getTitle().getPlainText());
System.out.println("[Debug Info]GdataBindingInvoker.PostInvoker --- feedEntry title: " + feedEntry.getTitle().getPlainText());
} else {
// Expect a key and data item
Entry<Object, Object> entry = new Entry<Object, Object>(args[0], args[1]);
// FIXME: this needs to be examinated more....
feedEntry =
feedEntry(entry, provider.getItemClassType(), provider.getItemXMLType(), provider.getMediator());
feedEntry = feedEntry(entry, provider.getItemClassType(), provider.getItemXMLType(), provider.getMediator());
}
try {
com.google.gdata.data.Entry createdEntry = googleService.insert(new URL(uri), feedEntry);
@ -212,13 +216,6 @@ class GdataBindingInvoker implements Invoker, DataExchangeSemantics {
id = (String)args[0];
Entry<Object, Object> entry = new Entry<Object, Object>(id, args[1]);
// FIXME: The following statement needs to be modified
// accordingly
/*
* feedEntry = feedEntry(entry, provider.getItemClassType(),
* provider.getItemXMLType(), provider.getMediator(),
* abderaFactory);
*/
}
// Send an HTTP PUT <Localhost>
@ -309,7 +306,7 @@ class GdataBindingInvoker implements Invoker, DataExchangeSemantics {
}
@SuppressWarnings("finally")
@Override
@Override
public Message invoke(Message msg) {
// Send an HTTP GET
@ -351,7 +348,7 @@ class GdataBindingInvoker implements Invoker, DataExchangeSemantics {
}
@SuppressWarnings("finally")
@Override
@Override
public Message invoke(Message msg) {
// Send an HTTP GET
@ -365,7 +362,7 @@ class GdataBindingInvoker implements Invoker, DataExchangeSemantics {
try {
Feed resultFeed = googleService.query(myQuery, Feed.class);
Feed resultFeed = googleService.query(myQuery, Feed.class);
msg.setBody(resultFeed);
} catch (ResourceNotFoundException ex) {
@ -425,10 +422,4 @@ class GdataBindingInvoker implements Invoker, DataExchangeSemantics {
return super.invoke(msg);
}
}
public boolean allowsPassByReference() {
// TODO Auto-generated method stub
return true;
}
}
}

View file

@ -58,9 +58,12 @@ import com.google.gdata.data.ParseSource;
import com.google.gdata.data.PlainTextConstruct;
import com.google.gdata.util.ServiceException;
/**
* A resource collection binding listener, implemented as a Servlet and
* registered in a Servlet host provided by the SCA hosting runtime.
*
* @version $Rev$ $Date$
*/
class GdataBindingListenerServlet extends HttpServlet {
private static final Logger logger = Logger.getLogger(GdataBindingListenerServlet.class.getName());

View file

@ -40,6 +40,8 @@ import com.google.gdata.util.AuthenticationException;
/**
* Implementation of a Binding provider factory for the Atom binding.
*
* @version $Rev$ $Date$
*/
public class GdataBindingProviderFactory implements BindingProviderFactory<GdataBinding> {
@ -63,7 +65,6 @@ public class GdataBindingProviderFactory implements BindingProviderFactory<Gdata
try {
return new GdataReferenceBindingProvider(component, reference, binding, mediator);
} catch (AuthenticationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null; //Google authentication error! : This exception needs to be handled into a better way
}

View file

@ -33,6 +33,7 @@ import com.google.gdata.data.TextContent;
/**
* Utility methods used in this package.
*
* @version $Rev$ $Date$
*/
class GdataBindingUtil {

View file

@ -83,7 +83,6 @@ class GdataReferenceBindingProvider implements ReferenceBindingProvider {
String authorization = "admin" + ":" + "admin";
authorizationHeader = "Basic " + new String(Base64.encodeBase64(authorization.getBytes()));
// Prepare gdata header
String serviceType = binding.getServiceType();
String usernane = binding.getUsername();
@ -97,8 +96,6 @@ class GdataReferenceBindingProvider implements ReferenceBindingProvider {
if(binding.getUsername().equals("admin") == false && binding.getPassword().equals("admin")==false){
googleService.setUserCredentials(binding.getUsername(),binding.getPassword());
}
// Create an HTTP client
HttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
@ -111,9 +108,6 @@ class GdataReferenceBindingProvider implements ReferenceBindingProvider {
String operationName = operation.getName();
// //System.out.println("GdataReferenceBindingProvider.createInvoker---operationName:"
// + operationName);
if (operationName.equals("get")) {
// Determine the collection item type
@ -128,7 +122,12 @@ class GdataReferenceBindingProvider implements ReferenceBindingProvider {
supportsFeedEntries = true;
}
return new GdataBindingInvoker.GetInvoker(operation, binding.getURI(), googleService, httpClient, authorizationHeader, this);
String entryURI = this.binding.getURI();
if(entryURI.contains("picasaweb.google.com/data/feed/api/")){
entryURI = entryURI.replace("picasaweb.google.com/data/feed/api/", "picasaweb.google.com/data/entry/api/");
}
return new GdataBindingInvoker.GetInvoker(operation, entryURI, googleService, httpClient, authorizationHeader, this);
} else if (operationName.equals("post")) {
@ -136,53 +135,51 @@ class GdataReferenceBindingProvider implements ReferenceBindingProvider {
} else if (operationName.equals("put")) {
return new GdataBindingInvoker.PutInvoker(operation, binding.getURI(), googleService, httpClient, authorizationHeader,
this);
String entryURI = this.binding.getURI();
if(entryURI.contains("picasaweb.google.com/data/feed/api/")){
entryURI = entryURI.replace("picasaweb.google.com/data/feed/api/", "picasaweb.google.com/data/entry/api/");
}
return new GdataBindingInvoker.PutInvoker(operation, entryURI, googleService, httpClient, authorizationHeader, this);
} else if (operationName.equals("delete")) {
return new GdataBindingInvoker.DeleteInvoker(operation, binding.getURI(), googleService, httpClient, authorizationHeader,
this);
String entryURI = this.binding.getURI();
if(entryURI.contains("picasaweb.google.com/data/feed/api/")){
entryURI = entryURI.replace("picasaweb.google.com/data/feed/api/", "picasaweb.google.com/data/entry/api/");
}
return new GdataBindingInvoker.DeleteInvoker(operation, entryURI, googleService, httpClient, authorizationHeader, this);
} else if (operationName.equals("getFeed") || operationName.equals("getAll")) {
// //System.out.println("GdataReferenceBindingProvider
// CreateInvoker: getFeed or getAll");
return new GdataBindingInvoker.GetAllInvoker(operation, binding.getURI(), googleService, httpClient, authorizationHeader,
this);
return new GdataBindingInvoker.GetAllInvoker(operation, binding.getURI(), googleService, httpClient, authorizationHeader, this);
} else if (operationName.equals("postMedia")) {
return new GdataBindingInvoker.PostMediaInvoker(operation, binding.getURI(), googleService, httpClient,
authorizationHeader, this);
return new GdataBindingInvoker.PostMediaInvoker(operation, binding.getURI(), googleService, httpClient, authorizationHeader, this);
} else if (operationName.equals("putMedia")) {
return new GdataBindingInvoker.PutMediaInvoker(operation, binding.getURI(), googleService, httpClient,
authorizationHeader, this);
return new GdataBindingInvoker.PutMediaInvoker(operation, binding.getURI(), googleService, httpClient, authorizationHeader, this);
} else if (operationName.equals("query")) {
return new GdataBindingInvoker.QueryInvoker(operation, binding.getURI(), googleService, httpClient, authorizationHeader,
this);
return new GdataBindingInvoker.QueryInvoker(operation, binding.getURI(), googleService, httpClient, authorizationHeader, this);
}
return new GdataBindingInvoker(operation, binding.getURI(), googleService, httpClient, authorizationHeader, this);
}
public InterfaceContract getBindingInterfaceContract() {
return reference.getInterfaceContract();
}
public void start() {
// Configure the HTTP client credentials
Credentials credentials = new UsernamePasswordCredentials("admin", "admin");
httpClient.getParams().setAuthenticationPreemptive(true);
URI uri = URI.create(binding.getURI());
httpClient.getState().setCredentials(new AuthScope(uri.getHost(), uri.getPort()), credentials);
// Find the get operation on the reference interface
if (true) {
return;
}
}
public void stop() {

View file

@ -40,10 +40,39 @@ public interface GdataBinding extends Binding {
*/
void setTitle(String title);
/**
* Returns the username to be used when authenticating with GData Services
* @return
*/
String getUsername();
/**
* Sets the username to be used when authenticating with GData Services
* @param username
*/
void setUsername(String username);
/**
* Returns the password to be used when authenticating with GData Services
* @return
*/
String getPassword();
String getServiceType();
void setUsername(String username);
/**
* Sets the password to be used when authenticating with GData Services
* @param password
*/
void setPassword(String password);
/**
* Returns the type os service being used
* @return
*/
String getServiceType();
/**
* Sets the type of service being used
* @param serviceType
*/
void setServiceType(String serviceType);
}

View file

@ -22,6 +22,7 @@ package org.apache.tuscany.sca.binding.gdata;
/**
* Factory for the GData binding
*
* @version $Rev$ $Date$
*/
public interface GdataBindingFactory {

View file

@ -25,6 +25,7 @@ import org.apache.tuscany.sca.binding.gdata.GdataBindingFactory;
/**
* Factory for the GData binding model.
*
* @version $Rev$ $Date$
*/
public class GdataBindingFactoryImpl implements GdataBindingFactory {

View file

@ -22,10 +22,6 @@ package org.apache.tuscany.sca.binding.gdata.impl;
import java.util.ArrayList;
import java.util.List;
import org.apache.tuscany.sca.assembly.Binding;
import org.apache.tuscany.sca.assembly.Component;
import org.apache.tuscany.sca.assembly.ComponentService;
import org.apache.tuscany.sca.assembly.OptimizableBinding;
import org.apache.tuscany.sca.binding.gdata.GdataBinding;
import org.apache.tuscany.sca.policy.Intent;
import org.apache.tuscany.sca.policy.IntentAttachPointType;
@ -35,6 +31,7 @@ import org.apache.tuscany.sca.policy.PolicySetAttachPoint;
/**
* Implementation of the GData binding model.
*
* @version $Rev$ $Date$
*/
class GdataBindingImpl implements GdataBinding, PolicySetAttachPoint {
@ -44,15 +41,12 @@ class GdataBindingImpl implements GdataBinding, PolicySetAttachPoint {
private String username;
private String password;
private String serviceType;
private List<Intent> requiredIntents = new ArrayList<Intent>();
private List<PolicySet> policySets = new ArrayList<PolicySet>();
private IntentAttachPointType intentAttachPointType;
private List<PolicySet> applicablePolicySets = new ArrayList<PolicySet>();
public List<PolicySet> getApplicablePolicySets() {
return applicablePolicySets;
}
public String getName() {
return name;
}
@ -61,6 +55,10 @@ class GdataBindingImpl implements GdataBinding, PolicySetAttachPoint {
return uri;
}
public String getTitle() {
return title;
}
public String getUsername(){
return username;
}
@ -80,6 +78,10 @@ class GdataBindingImpl implements GdataBinding, PolicySetAttachPoint {
public void setURI(String uri) {
this.uri = uri;
}
public void setTitle(String title) {
this.title = title;
}
public void setUsername(String username) {
this.username = username;
@ -93,15 +95,6 @@ class GdataBindingImpl implements GdataBinding, PolicySetAttachPoint {
this.serviceType = serviceType;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public boolean isUnresolved() {
// The binding is always resolved
return false;
@ -111,6 +104,12 @@ class GdataBindingImpl implements GdataBinding, PolicySetAttachPoint {
// The binding is always resolved
}
//Policy related getters/setters
public List<PolicySet> getApplicablePolicySets() {
return applicablePolicySets;
}
public List<PolicySet> getPolicySets() {
return policySets;
}
@ -139,4 +138,4 @@ class GdataBindingImpl implements GdataBinding, PolicySetAttachPoint {
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
}

View file

@ -18,9 +18,6 @@
*/
package org.apache.tuscany.sca.binding.gdata.xml;
import java.util.ArrayList;
import java.util.List;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
@ -34,27 +31,21 @@ import org.apache.tuscany.sca.contribution.processor.ContributionWriteException;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import org.apache.tuscany.sca.core.FactoryExtensionPoint;
import org.apache.tuscany.sca.policy.Intent;
import org.apache.tuscany.sca.policy.IntentAttachPointType;
import org.apache.tuscany.sca.policy.IntentAttachPointTypeFactory;
import org.apache.tuscany.sca.policy.PolicySet;
import org.apache.tuscany.sca.policy.PolicySetAttachPoint;
/**
* A processor for <binding.gdata> elements.
*
* @version $Rev$ $Date$
*/
public class GdataBindingProcessor implements StAXArtifactProcessor<GdataBinding> {
private QName BINDING_GDATA = new QName("http://tuscany.apache.org/xmlns/sca/1.0", "binding.gdata");
private final GdataBindingFactory factory;
private IntentAttachPointTypeFactory intentAttachPointTypeFactory;
//private PolicyAttachPointProcessor policyProcessor;
public GdataBindingProcessor(FactoryExtensionPoint modelFactories) {
this.factory = modelFactories.getFactory(GdataBindingFactory.class);
this.intentAttachPointTypeFactory = modelFactories.getFactory(IntentAttachPointTypeFactory.class);
System.out.println("[Debug Info]GdataBindingProcessor reached");
}
public QName getArtifactType() {
@ -67,90 +58,64 @@ public class GdataBindingProcessor implements StAXArtifactProcessor<GdataBinding
public GdataBinding read(XMLStreamReader reader) throws ContributionReadException, XMLStreamException {
GdataBinding gdataBinding = factory.createGdataBinding();
IntentAttachPointType bindingType = intentAttachPointTypeFactory.createBindingType();
bindingType.setName(getArtifactType());
bindingType.setUnresolved(true);
((PolicySetAttachPoint)gdataBinding).setType(bindingType);
String name = reader.getAttributeValue(null, "name");
if (name != null) {
gdataBinding.setName(name);
gdataBinding.setName(name);
}
String uri = reader.getAttributeValue(null, "uri");
if (uri != null) {
gdataBinding.setURI(uri);
gdataBinding.setURI(uri);
}
String serviceType = reader.getAttributeValue(null, "serviceType");
if (serviceType != null) {
gdataBinding.setServiceType(serviceType);
gdataBinding.setServiceType(serviceType);
}
String username = reader.getAttributeValue(null, "username");
if (username != null) {
gdataBinding.setUsername(username);
gdataBinding.setUsername(username);
}
String password = reader.getAttributeValue(null, "password");
if (password != null) {
gdataBinding.setPassword(password);
gdataBinding.setPassword(password);
}
//policyProcessor.readPolicies(echoBinding, reader);
return gdataBinding;
}
public void write(GdataBinding gdataBinding, XMLStreamWriter writer) throws ContributionWriteException, XMLStreamException {
//policyProcessor.writePolicyPrefixes(gdataBinding, writer);
writer.writeStartElement(BINDING_GDATA.getNamespaceURI(), BINDING_GDATA.getLocalPart());
//policyProcessor.writePolicyAttributes(gdataBinding, writer);
if (gdataBinding.getName() != null) {
writer.writeAttribute("name", gdataBinding.getName());
writer.writeAttribute("name", gdataBinding.getName());
}
if (gdataBinding.getURI() != null) {
writer.writeAttribute("uri", gdataBinding.getURI());
writer.writeAttribute("uri", gdataBinding.getURI());
}
if (gdataBinding.getServiceType() != null) {
writer.writeAttribute("serviceType", gdataBinding.getServiceType());
writer.writeAttribute("serviceType", gdataBinding.getServiceType());
}
if (gdataBinding.getUsername() != null) {
writer.writeAttribute("username", gdataBinding.getUsername());
writer.writeAttribute("username", gdataBinding.getUsername());
}
if (gdataBinding.getPassword() != null) {
writer.writeAttribute("password", gdataBinding.getPassword());
writer.writeAttribute("password", gdataBinding.getPassword());
}
writer.writeEndElement();
}
//FIXME: Resolve the attached policySet, might not needed (the echo binding implementation example)
public void resolve(GdataBinding gdataBinding, ModelResolver resolver) throws ContributionResolveException {
PolicySetAttachPoint policySetAttachPoint = (PolicySetAttachPoint)gdataBinding;
List<Intent> requiredIntents = new ArrayList<Intent>();
Intent resolvedIntent = null;
for ( Intent intent : policySetAttachPoint.getRequiredIntents() ) {
resolvedIntent = resolver.resolveModel(Intent.class, intent);
requiredIntents.add(resolvedIntent);
}
policySetAttachPoint.getRequiredIntents().clear();
policySetAttachPoint.getRequiredIntents().addAll(requiredIntents);
List<PolicySet> resolvedPolicySets = new ArrayList<PolicySet>();
PolicySet resolvedPolicySet = null;
for ( PolicySet policySet : policySetAttachPoint.getPolicySets() ) {
resolvedPolicySet = resolver.resolveModel(PolicySet.class, policySet);
resolvedPolicySets.add(resolvedPolicySet);
}
policySetAttachPoint.getPolicySets().clear();
policySetAttachPoint.getPolicySets().addAll(resolvedPolicySets);
}
}

View file

@ -1,205 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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.

View file

@ -1 +0,0 @@
This directory contains a generated MANIFEST.MF file.

View file

@ -1,6 +0,0 @@
${pom.name}
Copyright (c) 2005 - 2008 The Apache Software Foundation
This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

View file

@ -1,7 +0,0 @@
mvn gpg:sign-and-deploy-file -DgroupId=com.google.gdata -DartifactId=gdata-core -Dversion=1.0 -Dpackaging=jar -Dfile=gdata-core-1.0.jar -DrepositoryId=apache.people -Durl=scp://people.apache.org/home/lresende/public_html/google-gdata/maven -Dkeyname=lresende
mvn gpg:sign-and-deploy-file -DgroupId=com.google.gdata -DartifactId=gdata-client -Dversion=1.0 -Dpackaging=jar -Dfile=gdata-client-1.0.jar -DrepositoryId=apache.people -Durl=scp://people.apache.org/home/lresende/public_html/google-gdata/maven -Dkeyname=lresende
mvn gpg:sign-and-deploy-file -DgroupId=com.google.gdata -DartifactId=gdata-client-meta -Dversion=1.0 -Dpackaging=jar -Dfile=gdata-client-meta-1.0.jar -DrepositoryId=apache.people -Durl=scp://people.apache.org/home/lresende/public_html/google-gdata/maven -Dkeyname=lresende
mvn gpg:sign-and-deploy-file -DgroupId=com.google.gdata -DartifactId=gdata-media -Dversion=1.0 -Dpackaging=jar -Dfile=gdata-media-1.0.jar -DrepositoryId=apache.people -Durl=scp://people.apache.org/home/lresende/public_html/google-gdata/maven -Dkeyname=lresende

View file

@ -1,182 +0,0 @@
<?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>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-modules</artifactId>
<version>1.4-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>tuscany-binding-gdata2-runtime</artifactId>
<name>Apache Tuscany SCA GData Binding Extension Runtime</name>
<repositories>
<repository>
<id>com.google.gdata</id>
<url>http://people.apache.org/~lresende/google-gdata/maven/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-binding-gdata2</artifactId>
<version>1.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-assembly</artifactId>
<version>1.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-interface-java</artifactId>
<version>1.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-data-api</artifactId>
<version>1.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-core-spi</artifactId>
<version>1.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-databinding</artifactId>
<version>1.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-host-http</artifactId>
<version>1.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-host-jetty</artifactId>
<version>1.4-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-implementation-java-runtime</artifactId>
<version>1.4-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-node-impl</artifactId>
<version>1.4-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.gdata</groupId>
<artifactId>gdata-core</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.google.gdata</groupId>
<artifactId>gdata-client</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.3</version>
<exclusions>
<exclusion>
<artifactId>commons-codec</artifactId>
<groupId>commons-codec</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<exclusions>
<exclusion>
<artifactId>servlet-api</artifactId>
<groupId>javax.servlet</groupId>
</exclusion>
<exclusion>
<artifactId>avalon-framework</artifactId>
<groupId>avalon-framework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.5</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Bundle-Version>${tuscany.version}</Bundle-Version>
<Bundle-SymbolicName>org.apache.tuscany.sca.binding.gdata2.runtime</Bundle-SymbolicName>
<Bundle-Description>${pom.name}</Bundle-Description>
<Export-Package>org.apache.tuscany.sca.binding.gdata.collection</Export-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>

View file

@ -1,82 +0,0 @@
/*
* 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.sca.binding.gdata.collection;
import org.apache.tuscany.sca.data.collection.NotFoundException;
import org.osoa.sca.annotations.Remotable;
import com.google.gdata.data.BaseEntry;
import com.google.gdata.data.BaseFeed;
/**
* Provides access to a collection of resources using Atom.
*
* @version $Rev$ $Date$
*/
@Remotable
public interface Collection {
/**
* Get an Atom feed for a collection of resources.
*
* @return the Atom feed
*/
BaseFeed<? extends BaseFeed, ? extends BaseEntry> getFeed();
/**
* Get an Atom feed for a collection of resources resulting
* from a query.
*
* @param queryString a query string
* @return the Atom feed
*/
BaseFeed<? extends BaseFeed, ? extends BaseEntry> query(String queryString);
/**
* Creates a new entry.
*
* @param entry
* @return
*/
BaseEntry post(BaseEntry entry);
/**
* Retrieves an entry.
*
* @param id
* @return
*/
BaseEntry get(String id) throws NotFoundException;
/**
* Update an entry.
*
* @param id
* @param entry
* @return
*/
BaseEntry put(String id, BaseEntry entry) throws NotFoundException;
/**
* Delete an entry.
*
* @param id
*/
void delete(String id) throws NotFoundException;
}

View file

@ -1,55 +0,0 @@
/*
* 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.sca.binding.gdata.collection;
import com.google.gdata.data.BaseEntry;
import java.io.InputStream;
import org.osoa.sca.annotations.Remotable;
import org.apache.tuscany.sca.data.collection.NotFoundException;
/**
* Provides access to a collection of resources using Atom.
*
* @version $Rev$ $Date$
*/
@Remotable
public interface MediaCollection extends Collection {
/**
* Creates a new media entry
*
* @param title
* @param slug
* @param contentType
* @param media
*/
BaseEntry postMedia(String title, String slug, String contentType, InputStream media);
/**
* Update a media entry.
*
* @param id
* @param contentType
* @param media
* @return
*/
void putMedia(String id, String contentType, InputStream media) throws NotFoundException;
}

View file

@ -1,510 +0,0 @@
/*
* 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.sca.binding.gdata.provider;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.invocation.Message;
import org.osoa.sca.ServiceRuntimeException;
import com.google.gdata.client.GoogleService;
import com.google.gdata.client.Query;
import com.google.gdata.data.BaseEntry;
import com.google.gdata.data.BaseFeed;
import com.google.gdata.data.Entry;
import com.google.gdata.data.ExtensionProfile;
import com.google.gdata.data.Feed;
import com.google.gdata.data.ParseSource;
import com.google.gdata.util.AuthenticationException;
import java.net.URL;
import com.google.gdata.util.ResourceNotFoundException;
import com.google.gdata.util.common.xml.XmlWriter;
import java.io.StringWriter;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.DeleteMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.PutMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.tuscany.sca.binding.gdata.GDataBinding;
import org.apache.tuscany.sca.data.collection.NotFoundException;
import org.apache.tuscany.sca.invocation.DataExchangeSemantics;
/**
* Invoker for the Atom binding.
*
* @version $Rev$ $Date$
*/
class GDataBindingInvoker implements Invoker, DataExchangeSemantics {
Operation operation;
GDataBinding binding;
HttpClient httpClient;
String authorizationHeader;
GoogleService service;
GDataBindingInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
this.operation = operation;
this.binding = binding;
this.httpClient = httpClient;
this.authorizationHeader = authorizationHeader;
//Create the GoogleService
if (!binding.getServiceType().equals("sca")) {
this.service = new GoogleService(binding.getServiceType(), "");
try {
service.setUserCredentials(binding.getUsername(), binding.getPassword());
} catch (AuthenticationException ex) {
//FIXME - promote the exception
Logger.getLogger(GDataReferenceBindingProvider.class.getName()).log(Level.SEVERE, null, ex);
}
this.service.setConnectTimeout(60000);
}
}
public Message invoke(Message msg) {
// Shouldn't get here, as the only supported methods are
// defined in the ResourceCollection interface, and implemented
// by specific invoker subclasses
throw new UnsupportedOperationException(operation.getName());
}
/**
* Get operation invoker
*/
public static class GetInvoker extends GDataBindingInvoker {
public GetInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
super(operation, binding, httpClient, authorizationHeader);
}
@Override
public Message invoke(Message msg) {
BaseEntry entry;
GetMethod getMethod = null;
boolean parsing = false;
String id = (String) ((Object[]) msg.getBody())[0];
try {
// serviceType == "sca" - Send an HTTP GET
if (service == null) {
getMethod = new GetMethod(binding.getURI() + "/" + id);
getMethod.setRequestHeader("Authorization", authorizationHeader);
httpClient.executeMethod(getMethod);
int status = getMethod.getStatusCode();
// Read the Atom feed
if (status == 200) {
parsing = true;
ParseSource parser = new ParseSource(getMethod.getResponseBodyAsStream());
entry = BaseEntry.readEntry(parser);
msg.setBody(entry);
} else if (status == 404) {
msg.setFaultBody(new NotFoundException());
} else {
msg.setFaultBody(new ServiceRuntimeException("HTTP status code: " + status));
}
} // serviceType != "sca" - Use GoogleService
else {
entry = service.getEntry(new URL(id), Entry.class);
msg.setBody(entry);
}
} catch (ResourceNotFoundException ex) {
msg.setFaultBody(new ResourceNotFoundException("Invalid Resource at " + binding.getURI()));
} catch (Exception ex) {
msg.setFaultBody(new ServiceRuntimeException(ex));
} finally {
if (service == null && !parsing) {
getMethod.releaseConnection();
}
return msg;
}
}
}
/**
* Post operation invoker
*/
public static class PostInvoker extends GDataBindingInvoker {
public PostInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
super(operation, binding, httpClient, authorizationHeader);
}
@Override
public Message invoke(Message msg) {
BaseEntry entry = (BaseEntry) ((Object[]) msg.getBody())[0];
BaseEntry returnedEntry;
PostMethod postMethod = null;
boolean parsing = false;
try {
// serviceType == "sca" - Send an HTTP POST
if (service == null) {
postMethod = new PostMethod(binding.getURI());
postMethod.setRequestHeader("Authorization", authorizationHeader);
// Write the Atom entry
StringWriter strWriter = new StringWriter();
XmlWriter writer = new XmlWriter(strWriter);
entry.generateAtom(writer, new ExtensionProfile());
writer.flush();
writer.close();
postMethod.setRequestHeader("Content-type", "application/atom+xml; charset=utf-8");
postMethod.setRequestEntity(new StringRequestEntity(strWriter.toString()));
httpClient.executeMethod(postMethod);
int status = postMethod.getStatusCode();
// Read the Atom feed
if (status == 200 || status == 201) {
parsing = true;
ParseSource parser = new ParseSource(postMethod.getResponseBodyAsStream());
returnedEntry = BaseEntry.readEntry(parser);
msg.setBody(returnedEntry);
} else if (status == 404) {
msg.setFaultBody(new NotFoundException());
} else {
msg.setFaultBody(new ServiceRuntimeException("HTTP status code: " + status));
}
} // serviceType != "sca" - Use GoogleService
else {
returnedEntry = service.insert(new URL(binding.getURI()), entry);
msg.setBody(returnedEntry);
}
} catch (ResourceNotFoundException ex) {
msg.setFaultBody(new ResourceNotFoundException("Invalid Resource at " + binding.getURI()));
} catch (Exception ex) {
msg.setFaultBody(new ServiceRuntimeException(ex));
} finally {
if (service == null && !parsing) {
postMethod.releaseConnection();
}
return msg;
}
}
}
/**
* Put operation invoker
*/
public static class PutInvoker extends GDataBindingInvoker {
public PutInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
super(operation, binding, httpClient, authorizationHeader);
}
@Override
public Message invoke(Message msg) {
BaseEntry updatedEntry;
String id = (String) ((Object[]) msg.getBody())[0];
BaseEntry entry = (BaseEntry) ((Object[]) msg.getBody())[1];
PutMethod putMethod = null;
boolean parsing = false;
try {
// serviceType == "sca" - Send an HTTP PUT
if (service == null) {
putMethod = new PutMethod(binding.getURI() + "/" + id);
putMethod.setRequestHeader("Authorization", authorizationHeader);
// Write the Atom entry
StringWriter strWriter = new StringWriter();
XmlWriter writer = new XmlWriter(strWriter);
entry.generateAtom(writer, new ExtensionProfile());
writer.flush();
writer.close();
putMethod.setRequestHeader("Content-type", "application/atom+xml; charset=utf-8");
putMethod.setRequestEntity(new StringRequestEntity(strWriter.toString()));
httpClient.executeMethod(putMethod);
int status = putMethod.getStatusCode();
// Read the Atom feed
if (status == 200 || status == 201) {
parsing = true;
ParseSource parser = new ParseSource(putMethod.getResponseBodyAsStream());
updatedEntry = BaseEntry.readEntry(parser);
msg.setBody(updatedEntry);
} else if (status == 404) {
msg.setFaultBody(new NotFoundException());
} else {
msg.setFaultBody(new ServiceRuntimeException("HTTP status code: " + status));
}
} // serviceType != "sca" - Use GoogleService
else {
updatedEntry = service.update(new URL(id), entry);
msg.setBody(updatedEntry);
}
} catch (ResourceNotFoundException ex) {
msg.setFaultBody(new ResourceNotFoundException("Invalid Resource at " + binding.getURI()));
} catch (Exception ex) {
msg.setFaultBody(new ServiceRuntimeException(ex));
} finally {
if (service == null && !parsing) {
putMethod.releaseConnection();
}
return msg;
}
}
}
/**
* Delete operation invoker
*/
public static class DeleteInvoker extends GDataBindingInvoker {
public DeleteInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
super(operation, binding, httpClient, authorizationHeader);
}
@Override
public Message invoke(Message msg) {
DeleteMethod deleteMethod = null;
String id = (String) ((Object[]) msg.getBody())[0];
try {
// serviceType == "sca" - Send an HTTP DELETE
if (service == null) {
deleteMethod = new DeleteMethod(binding.getURI() + "/" + id);
deleteMethod.setRequestHeader("Authorization", authorizationHeader);
httpClient.executeMethod(deleteMethod);
int status = deleteMethod.getStatusCode();
// Read the Atom feed
if (status == 200) {
msg.setBody(null);
} else if (status == 404) {
msg.setFaultBody(new NotFoundException());
} else {
msg.setFaultBody(new ServiceRuntimeException("HTTP status code: " + status));
}
} // serviceType != "sca" - Use GoogleService
else {
service.delete(new URL(id));
msg.setBody(null);
}
} catch (ResourceNotFoundException ex) {
msg.setFaultBody(new ResourceNotFoundException("Invalid Resource at " + binding.getURI()));
} catch (Exception ex) {
msg.setFaultBody(new ServiceRuntimeException(ex));
} finally {
if (service == null) {
deleteMethod.releaseConnection();
}
return msg;
}
}
}
/**
* GetAll operation invoker
*/
public static class GetAllInvoker extends GDataBindingInvoker {
public GetAllInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
super(operation, binding, httpClient, authorizationHeader);
}
@Override
public Message invoke(Message msg) {
BaseFeed feed;
GetMethod getMethod = null;
boolean parsing = false;
try {
// serviceType == "sca" - Send an HTTP GET
if (service == null) {
getMethod = new GetMethod(binding.getURI());
getMethod.setRequestHeader("Authorization", authorizationHeader);
httpClient.executeMethod(getMethod);
int status = getMethod.getStatusCode();
// Read the Atom feed
if (status == 200) {
parsing = true;
ParseSource parser = new ParseSource(getMethod.getResponseBodyAsStream());
feed = BaseFeed.readFeed(parser);
msg.setBody(feed);
} else if (status == 404) {
msg.setFaultBody(new NotFoundException());
} else {
msg.setFaultBody(new ServiceRuntimeException("HTTP status code: " + status));
}
} // serviceType != "sca" - Use GoogleService
else {
feed = service.getFeed(new URL(binding.getURI()), Feed.class);
msg.setBody(feed);
}
} catch (ResourceNotFoundException ex) {
msg.setFaultBody(new ResourceNotFoundException("Invalid Resource at " + binding.getURI()));
} catch (Exception ex) {
msg.setFaultBody(new ServiceRuntimeException(ex));
} finally {
if (service == null && !parsing) {
getMethod.releaseConnection();
}
return msg;
}
}
}
/**
* Query operation invoker
*/
public static class QueryInvoker extends GDataBindingInvoker {
public QueryInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
super(operation, binding, httpClient, authorizationHeader);
}
@Override
public Message invoke(Message msg) {
BaseFeed feed;
GetMethod getMethod = null;
boolean parsing = false;
String queryString = (String) ((Object[]) msg.getBody())[0];
try {
// serviceType == "sca" - Send an HTTP GET
if (service == null) {
getMethod = new GetMethod(binding.getURI());
getMethod.setRequestHeader("Authorization", authorizationHeader);
getMethod.setQueryString(queryString);
httpClient.executeMethod(getMethod);
int status = getMethod.getStatusCode();
// Read the Atom feed
if (status == 200) {
parsing = true;
ParseSource parser = new ParseSource(getMethod.getResponseBodyAsStream());
feed = BaseFeed.readFeed(parser);
msg.setBody(feed);
} else if (status == 404) {
msg.setFaultBody(new NotFoundException());
} else {
msg.setFaultBody(new ServiceRuntimeException("HTTP status code: " + status));
}
} // serviceType != "sca" - Use GoogleService
else {
Query query = new Query(new URL(binding.getURI()));
query.setFullTextQuery(queryString);
feed = service.query(query, Feed.class);
msg.setBody(feed);
}
} catch (ResourceNotFoundException ex) {
msg.setFaultBody(new ResourceNotFoundException("Invalid Resource at " + binding.getURI()));
} catch (Exception ex) {
msg.setFaultBody(new ServiceRuntimeException(ex));
} finally {
if (service == null && !parsing) {
getMethod.releaseConnection();
}
return msg;
}
}
}
/**
* PostMedia operation invoker
*/
public static class PostMediaInvoker extends GDataBindingInvoker {
public PostMediaInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
super(operation, binding, httpClient, authorizationHeader);
}
@Override
public Message invoke(Message msg) {
// TODO implement
return super.invoke(msg);
}
}
/**
* PutMedia operation invoker
*/
public static class PutMediaInvoker extends GDataBindingInvoker {
public PutMediaInvoker(Operation operation, GDataBinding binding, HttpClient httpClient, String authorizationHeader) {
super(operation, binding, httpClient, authorizationHeader);
}
@Override
public Message invoke(Message msg) {
// TODO implement
return super.invoke(msg);
}
}
public boolean allowsPassByReference() {
return true;
}
}

View file

@ -1,426 +0,0 @@
/*
* 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.sca.binding.gdata.provider;
import com.google.gdata.data.BaseEntry;
import com.google.gdata.data.BaseFeed;
import com.google.gdata.data.ExtensionProfile;
import com.google.gdata.data.Link;
import com.google.gdata.data.ParseSource;
import com.google.gdata.util.ServiceException;
import com.google.gdata.util.common.xml.XmlWriter;
import java.io.IOException;
import java.net.URLDecoder;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.runtime.RuntimeWire;
import org.apache.tuscany.sca.invocation.MessageFactory;
import org.apache.tuscany.sca.databinding.Mediator;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.InvocationChain;
import org.apache.tuscany.sca.invocation.Message;
class GDataBindingListenerServlet extends HttpServlet {
private static final Logger logger = Logger.getLogger(GDataBindingListenerServlet.class.getName());
private RuntimeWire wire;
private Invoker getFeedInvoker;
private Invoker queryInvoker;
private Invoker getInvoker;
private Invoker postInvoker;
private Invoker postMediaInvoker;
private Invoker putInvoker;
private Invoker putMediaInvoker;
private Invoker deleteInvoker;
private MessageFactory messageFactory;
private String title;
private Mediator mediator;
// private DataType<?> itemClassType;
// private DataType<?> itemXMLType;
// private boolean supportsFeedEntries;
GDataBindingListenerServlet(RuntimeWire wire, MessageFactory messageFactory, Mediator mediator, String title) {
this.wire = wire;
this.messageFactory = messageFactory;
this.mediator = mediator;
this.title = title;
// Get the invokers for the supported operations
//Operation getOperation = null;
for (InvocationChain invocationChain : this.wire.getInvocationChains()) {
invocationChain.setAllowsPassByReference(true);
Operation operation = invocationChain.getTargetOperation();
String operationName = operation.getName();
if (operationName.equals("getFeed")) {
getFeedInvoker = invocationChain.getHeadInvoker();
} else if (operationName.equals("query")) {
queryInvoker = invocationChain.getHeadInvoker();
} else if (operationName.equals("get")) {
getInvoker = invocationChain.getHeadInvoker();
//getOperation = operation;
} else if (operationName.equals("put")) {
putInvoker = invocationChain.getHeadInvoker();
} else if (operationName.equals("putMedia")) {
putMediaInvoker = invocationChain.getHeadInvoker();
} else if (operationName.equals("post")) {
postInvoker = invocationChain.getHeadInvoker();
} else if (operationName.equals("postMedia")) {
postMediaInvoker = invocationChain.getHeadInvoker();
} else if (operationName.equals("delete")) {
deleteInvoker = invocationChain.getHeadInvoker();
}
}
// // Determine the collection item type
// itemXMLType = new DataTypeImpl<Class<?>>(String.class.getName(), String.class, String.class);
// Class<?> itemClass = getOperation.getOutputType().getPhysical();
// if (itemClass == BaseEntry.class) {
// supportsFeedEntries = true;
// }
// DataType<XMLType> outputType = getOperation.getOutputType();
// QName qname = outputType.getLogical().getElementName();
// qname = new QName(qname.getNamespaceURI(), itemClass.getSimpleName());
// itemClassType = new DataTypeImpl<XMLType>("java:complexType", itemClass, new XMLType(qname, null));
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int servletPathLength = request.getContextPath().length() + request.getServletPath().length();
String path = URLDecoder.decode(request.getRequestURI().substring(servletPathLength), "UTF-8");
logger.fine("get " + request.getRequestURI());
if (path != null && path.equals("/atomsvc")) {
//FIX-ME - Doing nothing
} else if (path == null || path.length() == 0 || path.equals("/")) {
// Return a feed containing the entries in the collection
BaseFeed feed = null;
Message requestMessage = messageFactory.createMessage();
Message responseMessage;
if (request.getQueryString() != null) {
requestMessage.setBody(new Object[]{request.getQueryString()});
responseMessage = queryInvoker.invoke(requestMessage);
} else {
responseMessage = getFeedInvoker.invoke(requestMessage);
}
if (responseMessage.isFault()) {
throw new ServletException((Throwable) responseMessage.getBody());
}
// The service implementation supports feed entries, invoke its getFeed operation
feed = (BaseFeed) responseMessage.getBody();
if (feed != null) {
// Write the Atom feed
response.setContentType("application/atom+xml; charset=utf-8");
try {
XmlWriter writer = new XmlWriter(response.getWriter());
feed.generateAtom(writer, new ExtensionProfile());
writer.flush();
writer.close();
} catch (IOException ioe) {
throw new ServletException(ioe);
}
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
} else if (path.startsWith("/")) {
// Return a specific entry in the collection
BaseEntry feedEntry;
// Invoke the get operation on the service implementation
Message requestMessage = messageFactory.createMessage();
String id = path.substring(1);
requestMessage.setBody(new Object[]{id});
Message responseMessage = getInvoker.invoke(requestMessage);
if (responseMessage.isFault()) {
throw new ServletException((Throwable) responseMessage.getBody());
}
// The service implementation returns a feed entry
feedEntry = responseMessage.getBody();
// Write the Atom entry
if (feedEntry != null) {
response.setContentType("application/atom+xml; charset=utf-8");
try {
XmlWriter writer = new XmlWriter(response.getWriter());
feedEntry.generateAtom(writer, new ExtensionProfile());
writer.flush();
writer.close();
} catch (IOException ioe) {
throw new ServletException(ioe);
}
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
} else {
// Path doesn't match any known pattern
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// FIX-ME: Authenticate the user
// String user = processAuthorizationHeader(request);
// if (user == null) {
// unauthorized(response);
// return;
// }
// Get the request path
String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8");
if (path == null || path.length() == 0 || path.equals("/")) {
BaseEntry createdFeedEntry = null;
// Create a new Atom entry
String contentType = request.getContentType();
if (contentType != null && contentType.startsWith("application/atom+xml")) {
// Read the entry from the request
BaseEntry feedEntry;
try {
ParseSource parser = new ParseSource(request.getReader());
feedEntry = BaseEntry.readEntry(parser);
} catch (ServiceException ex) {
throw new ServletException(ex);
}
// The service implementation supports feed entries, pass the entry to it
Message requestMessage = messageFactory.createMessage();
requestMessage.setBody(new Object[]{feedEntry});
Message responseMessage = postInvoker.invoke(requestMessage);
if (responseMessage.isFault()) {
throw new ServletException((Throwable) responseMessage.getBody());
}
createdFeedEntry = responseMessage.getBody();
} else if (contentType != null) {
// Create a new media entry
// Get incoming headers
String reqTitle = request.getHeader("Title");
String slug = request.getHeader("Slug");
// Let the component implementation create the media entry
Message requestMessage = messageFactory.createMessage();
requestMessage.setBody(new Object[]{reqTitle, slug, contentType, request.getInputStream()});
Message responseMessage = postMediaInvoker.invoke(requestMessage);
if (responseMessage.isFault()) {
throw new ServletException((Throwable) responseMessage.getBody());
}
createdFeedEntry = responseMessage.getBody();
} else {
response.sendError(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
}
// A new entry was created successfully
if (createdFeedEntry != null) {
// Set location of the created entry in the Location header
Link link = createdFeedEntry.getSelfLink();
if (link != null) {
response.addHeader("Location", link.getHref().toString());
}
// Write the created Atom entry
response.setStatus(HttpServletResponse.SC_CREATED);
response.setContentType("application/atom+xml; charset=utf-8");
try {
XmlWriter writer = new XmlWriter(response.getWriter());
createdFeedEntry.generateAtom(writer, new ExtensionProfile());
writer.flush();
writer.close();
} catch (IOException ioe) {
throw new ServletException(ioe);
}
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
}
@Override
protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// FIX-ME: Authenticate the user
// String user = processAuthorizationHeader(request);
// if (user == null) {
// unauthorized(response);
// return;
// }
// Get the request path
String path = request.getRequestURI().substring(request.getServletPath().length());
BaseEntry createdFeedEntry = null;
if (path != null && path.startsWith("/")) {
String id = path.substring(1);
// Update an Atom entry
String contentType = request.getContentType();
if (contentType != null && contentType.startsWith("application/atom+xml")) {
// Read the entry from the request
BaseEntry feedEntry;
try {
ParseSource parser = new ParseSource(request.getReader());
feedEntry = BaseEntry.readEntry(parser);
} catch (ServiceException ex) {
throw new ServletException(ex);
}
// Let the component implementation create it
// The service implementation supports feed entries, pass the entry to it
Message requestMessage = messageFactory.createMessage();
requestMessage.setBody(new Object[]{id, feedEntry});
Message responseMessage = putInvoker.invoke(requestMessage);
if (responseMessage.isFault()) {
Object body = responseMessage.getBody();
if (body.getClass().getName().endsWith(".NotFoundException")) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
} else {
throw new ServletException((Throwable) responseMessage.getBody());
}
}
createdFeedEntry = responseMessage.getBody();
} else if (contentType != null) {
// Updated a media entry
// Let the component implementation create the media entry
Message requestMessage = messageFactory.createMessage();
requestMessage.setBody(new Object[]{id, contentType, request.getInputStream()});
Message responseMessage = putMediaInvoker.invoke(requestMessage);
Object body = responseMessage.getBody();
if (responseMessage.isFault()) {
if (body.getClass().getName().endsWith(".NotFoundException")) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
} else {
throw new ServletException((Throwable) responseMessage.getBody());
}
}
createdFeedEntry = responseMessage.getBody();
} else {
response.sendError(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE);
}
// A new entry was created successfully
if (createdFeedEntry != null) {
// Set location of the created entry in the Location header
Link link = createdFeedEntry.getSelfLink();
if (link != null) {
response.addHeader("Location", link.getHref().toString());
}
// Write the created Atom entry
response.setStatus(HttpServletResponse.SC_CREATED);
response.setContentType("application/atom+xml; charset=utf-8");
try {
XmlWriter writer = new XmlWriter(response.getWriter());
createdFeedEntry.generateAtom(writer, new ExtensionProfile());
writer.flush();
writer.close();
} catch (IOException ioe) {
throw new ServletException(ioe);
}
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
} else {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
}
@Override
protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// FIX-ME: Authenticate the user
// String user = processAuthorizationHeader(request);
// if (user == null) {
// unauthorized(response);
// return;
// }
// Get the request path
String path = URLDecoder.decode(request.getRequestURI().substring(request.getServletPath().length()), "UTF-8");
String id;
if (path != null && path.startsWith("/")) {
id = path.substring(1);
} else {
id = "";
}
// Delete a specific entry from the collection
Message requestMessage = messageFactory.createMessage();
requestMessage.setBody(new Object[]{id});
Message responseMessage = deleteInvoker.invoke(requestMessage);
if (responseMessage.isFault()) {
Object body = responseMessage.getBody();
if (body.getClass().getName().endsWith(".NotFoundException")) {
response.sendError(HttpServletResponse.SC_NOT_FOUND);
} else {
throw new ServletException((Throwable) responseMessage.getBody());
}
}
}
}

View file

@ -1,74 +0,0 @@
/*
* 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.sca.binding.gdata.provider;
import org.apache.tuscany.sca.binding.gdata.GDataBinding;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.core.FactoryExtensionPoint;
import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint;
import org.apache.tuscany.sca.databinding.Mediator;
import org.apache.tuscany.sca.databinding.TransformerExtensionPoint;
import org.apache.tuscany.sca.databinding.impl.MediatorImpl;
import org.apache.tuscany.sca.host.http.ServletHost;
import org.apache.tuscany.sca.host.http.ServletHostExtensionPoint;
import org.apache.tuscany.sca.invocation.MessageFactory;
import org.apache.tuscany.sca.provider.BindingProviderFactory;
import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
import org.apache.tuscany.sca.provider.ServiceBindingProvider;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
import org.apache.tuscany.sca.runtime.RuntimeComponentService;
/**
* Implementation of a Binding provider factory for the Atom binding.
*
* @version $Rev$ $Date$
*/
public class GDataBindingProviderFactory implements BindingProviderFactory<GDataBinding> {
private MessageFactory messageFactory;
private Mediator mediator;
private ServletHost servletHost;
public GDataBindingProviderFactory(ExtensionPointRegistry extensionPoints) {
ServletHostExtensionPoint servletHosts = extensionPoints.getExtensionPoint(ServletHostExtensionPoint.class);
this.servletHost = servletHosts.getServletHosts().get(0);
FactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class);
this.messageFactory = modelFactories.getFactory(MessageFactory.class);
this.mediator = new MediatorImpl(extensionPoints.getExtensionPoint(DataBindingExtensionPoint.class),
extensionPoints.getExtensionPoint(TransformerExtensionPoint.class));
}
public ReferenceBindingProvider createReferenceBindingProvider(RuntimeComponent component,
RuntimeComponentReference reference,
GDataBinding binding) {
return new GDataReferenceBindingProvider(component, reference, binding);
}
public ServiceBindingProvider createServiceBindingProvider(RuntimeComponent component,
RuntimeComponentService service,
GDataBinding binding) {
return new GDataServiceBindingProvider(component, service, binding, servletHost, messageFactory, mediator);
}
public Class<GDataBinding> getModelType() {
return GDataBinding.class;
}
}

View file

@ -1,125 +0,0 @@
/*
* 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.sca.binding.gdata.provider;
import org.apache.tuscany.sca.binding.gdata.GDataBinding;
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.Invoker;
import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
import org.apache.commons.httpclient.HttpClient;
import java.net.URI;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HttpConnectionManager;
import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
/**
* Implementation of the Atom binding provider.
*
* @version $Rev$ $Date$
*/
class GDataReferenceBindingProvider implements ReferenceBindingProvider {
private RuntimeComponentReference reference;
private GDataBinding binding;
private HttpClient httpClient;
private String authorizationHeader;
/**
* Constructs a new AtomReferenceBindingProvider
* @param component
* @param reference
* @param binding
* @param mediator
*/
GDataReferenceBindingProvider(RuntimeComponent component,
RuntimeComponentReference reference,
GDataBinding binding) {
this.reference = reference;
this.binding = binding;
// Prepare authorization header
//String authorization = "admin" + ":" + "admin";
String authorization = "gsocstudent2008" + ":" + "gsoc2008";
authorizationHeader = "Basic " + new String(Base64.encodeBase64(authorization.getBytes()));
// Create an HTTP client
HttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();
connectionManager.getParams().setDefaultMaxConnectionsPerHost(10);
connectionManager.getParams().setConnectionTimeout(60000);
httpClient = new HttpClient(connectionManager);
}
public Invoker createInvoker(Operation operation) {
String operationName = operation.getName();
if (operationName.equals("get")) {
return new GDataBindingInvoker.GetInvoker(operation, binding, httpClient, authorizationHeader);
} else if (operationName.equals("post")) {
return new GDataBindingInvoker.PostInvoker(operation, binding, httpClient, authorizationHeader);
} else if (operationName.equals("put")) {
return new GDataBindingInvoker.PutInvoker(operation, binding, httpClient, authorizationHeader);
} else if (operationName.equals("delete")) {
return new GDataBindingInvoker.DeleteInvoker(operation, binding, httpClient, authorizationHeader);
} else if (operationName.equals("getFeed") || operationName.equals("getAll")) {
return new GDataBindingInvoker.GetAllInvoker(operation, binding, httpClient, authorizationHeader);
} else if (operationName.equals("postMedia")) {
return new GDataBindingInvoker.PostMediaInvoker(operation, binding, httpClient, authorizationHeader);
} else if (operationName.equals("putMedia")) {
return new GDataBindingInvoker.PutMediaInvoker(operation, binding, httpClient, authorizationHeader);
} else if (operationName.equals("query")) {
return new GDataBindingInvoker.QueryInvoker(operation, binding, httpClient, authorizationHeader);
}
return new GDataBindingInvoker(operation, binding, httpClient, authorizationHeader);
}
public InterfaceContract getBindingInterfaceContract() {
return reference.getInterfaceContract();
}
public void start() {
// Configure the HTTP client credentials
//Credentials credentials = new UsernamePasswordCredentials("admin", "admin");
Credentials credentials = new UsernamePasswordCredentials("gsocstudent2008", "gsoc2008");
httpClient.getParams().setAuthenticationPreemptive(true);
URI uri = URI.create(binding.getURI());
httpClient.getState().setCredentials(new AuthScope(uri.getHost(), uri.getPort()), credentials);
// Find the get operation on the reference interface
if (true) {
return;
}
}
public void stop() {
}
public boolean supportsOneWayInvocation() {
return false;
}
}

View file

@ -1,85 +0,0 @@
/*
* 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.sca.binding.gdata.provider;
import org.apache.tuscany.sca.binding.gdata.GDataBinding;
import org.apache.tuscany.sca.databinding.Mediator;
import org.apache.tuscany.sca.host.http.ServletHost;
import org.apache.tuscany.sca.interfacedef.InterfaceContract;
import org.apache.tuscany.sca.invocation.MessageFactory;
import org.apache.tuscany.sca.provider.ServiceBindingProvider;
import org.apache.tuscany.sca.runtime.RuntimeComponent;
import org.apache.tuscany.sca.runtime.RuntimeComponentService;
import org.apache.tuscany.sca.runtime.RuntimeWire;
class GDataServiceBindingProvider implements ServiceBindingProvider {
private RuntimeComponentService service;
private GDataBinding binding;
private ServletHost servletHost;
private MessageFactory messageFactory;
private String servletMapping;
private Mediator mediator;
GDataServiceBindingProvider(RuntimeComponent component,
RuntimeComponentService service,
GDataBinding binding,
ServletHost servletHost,
MessageFactory messageFactory,
Mediator mediator) {
this.service = service;
this.binding = binding;
this.servletHost = servletHost;
this.messageFactory = messageFactory;
this.mediator = mediator;
}
public void start() {
RuntimeComponentService componentService = (RuntimeComponentService) service;
RuntimeWire wire = componentService.getRuntimeWire(binding);
GDataBindingListenerServlet servlet =
new GDataBindingListenerServlet(wire, messageFactory, mediator, binding.getTitle());
servletMapping = binding.getURI();
if (!servletMapping.endsWith("/")) {
servletMapping += "/";
}
if (!servletMapping.endsWith("*")) {
servletMapping += "*";
}
servletHost.addServletMapping(servletMapping, servlet);
// Save the actual binding URI in the binding
binding.setURI(servletHost.getURLMapping(binding.getURI()).toString());
}
public void stop() {
servletHost.removeServletMapping(servletMapping);
}
public InterfaceContract getBindingInterfaceContract() {
return service.getInterfaceContract();
}
public boolean supportsOneWayInvocation() {
return false;
}
}

View file

@ -1,19 +0,0 @@
# 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.
# Implementation class for the binding extension
org.apache.tuscany.sca.binding.gdata.provider.GDataBindingProviderFactory;model=org.apache.tuscany.sca.binding.gdata.GDataBinding

View file

@ -1,129 +0,0 @@
/*
* 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.sca.binding.gdata.calendarconsumer;
import org.apache.tuscany.sca.node.Contribution;
import org.apache.tuscany.sca.node.ContributionLocationHelper;
import org.apache.tuscany.sca.node.Node;
import org.apache.tuscany.sca.node.NodeFactory;
import com.google.gdata.data.BaseEntry;
import com.google.gdata.data.DateTime;
import com.google.gdata.data.Entry;
import com.google.gdata.data.Feed;
import com.google.gdata.data.Person;
import com.google.gdata.data.PlainTextConstruct;
import com.google.gdata.data.extensions.EventEntry;
import com.google.gdata.data.extensions.When;
public class CalendarConsumer {
public static void main(String... args) throws Exception {
Node node;
CalendarConsumerImpl resourceCollection;
//init
String contribution = ContributionLocationHelper.getContributionLocation(CalendarConsumer.class);
node = NodeFactory.newInstance().createNode(
"org/apache/tuscany/sca/binding/gdata/CalendarConsumer.composite", new Contribution("consumer", contribution));
node.start();
resourceCollection = node.getService(CalendarConsumerImpl.class, "CalendarConsumer");
//test methods
System.out.println(
"\n//--------------------------" +
"\n// Get the Feed" +
"\n//--------------------------\n");
Feed feed = (Feed) resourceCollection.getFeed();
System.out.println("Feed content - " + feed.getUpdated().toString() + ":\n");
for (Entry e : feed.getEntries()) {
System.out.println("# " + e.getTitle().getPlainText());
}
System.out.println(
"\n//--------------------------" +
"\n// Post a new Entry" +
"\n//--------------------------\n");
EventEntry entry = new EventEntry();
entry.setTitle(new PlainTextConstruct("GSoC extra activity"));
entry.setContent(new PlainTextConstruct("Reading the book Beautiful Code"));
Person author = new Person("GSoC Student 2008", null, "gsocstudent2008@gmail.com");
entry.getAuthors().add(author);
DateTime startTime = DateTime.parseDateTime("2008-07-30T15:00:00-08:00");
DateTime endTime = DateTime.parseDateTime("2008-07-30T17:00:00-08:00");
When eventTimes = new When();
eventTimes.setStartTime(startTime);
eventTimes.setEndTime(endTime);
entry.addTime(eventTimes);
BaseEntry returnedEntry = resourceCollection.post(entry);
System.out.println("# " + returnedEntry.getTitle().getPlainText());
System.out.println(
"\n//--------------------------" +
"\n// Get an Entry" +
"\n//--------------------------\n");
BaseEntry searchedEntry = resourceCollection.get(returnedEntry.getSelfLink().getHref());
System.out.println("# " + searchedEntry.getTitle().getPlainText());
System.out.println(
"\n//--------------------------" +
"\n// Update an Entry" +
"\n//--------------------------\n");
searchedEntry.setTitle(new PlainTextConstruct("GSoC extra activity(opcional)"));
BaseEntry updatedEntry = resourceCollection.put(searchedEntry.getEditLink().getHref(), searchedEntry);
System.out.println("# " + updatedEntry.getTitle().getPlainText());
System.out.println(
"\n//--------------------------" +
"\n// Delete an Entry" +
"\n//--------------------------\n");
resourceCollection.delete(updatedEntry.getEditLink().getHref());
System.out.println(
"\n//--------------------------" +
"\n// Execute a query" +
"\n//--------------------------\n");
feed = (Feed) resourceCollection.query("Students");
System.out.println("Feed content - " + feed.getUpdated().toString() + ":\n");
for (Entry e : feed.getEntries()) {
System.out.println("# " + e.getTitle().getPlainText());
}
//close
node.stop();
node.destroy();
}
}

View file

@ -1,55 +0,0 @@
/*
* 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.sca.binding.gdata.calendarconsumer;
import com.google.gdata.data.BaseEntry;
import com.google.gdata.data.BaseFeed;
import org.apache.tuscany.sca.binding.gdata.collection.Collection;
import org.osoa.sca.annotations.Reference;
public class CalendarConsumerImpl {
@Reference
public Collection resourceCollection;
public BaseFeed getFeed() {
return resourceCollection.getFeed();
}
public BaseEntry post(BaseEntry entry) {
return resourceCollection.post(entry);
}
public BaseEntry get(String id) throws org.apache.tuscany.sca.data.collection.NotFoundException {
return resourceCollection.get(id);
}
public BaseEntry put(String id, BaseEntry entry) throws org.apache.tuscany.sca.data.collection.NotFoundException {
return resourceCollection.put(id, entry);
}
public void delete(String id) throws org.apache.tuscany.sca.data.collection.NotFoundException {
resourceCollection.delete(id);
}
public BaseFeed query(String queryString) {
return resourceCollection.query(queryString);
}
}

View file

@ -1,212 +0,0 @@
/*
* 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.sca.binding.gdata.calendarconsumer;
import static org.junit.Assert.assertNotNull;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.tuscany.sca.data.collection.NotFoundException;
import org.apache.tuscany.sca.node.Contribution;
import org.apache.tuscany.sca.node.ContributionLocationHelper;
import org.apache.tuscany.sca.node.Node;
import org.apache.tuscany.sca.node.NodeFactory;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import com.google.gdata.data.BaseEntry;
import com.google.gdata.data.DateTime;
import com.google.gdata.data.Feed;
import com.google.gdata.data.Person;
import com.google.gdata.data.PlainTextConstruct;
import com.google.gdata.data.extensions.EventEntry;
import com.google.gdata.data.extensions.When;
//FIX-ME: the tests are executed in an incorrect order
public class CalendarConsumerTest {
private static Node node;
private Feed feed;
private BaseEntry returnedEntry;
private BaseEntry searchedEntry;
private BaseEntry updatedEntry;
private static CalendarConsumerImpl consumer;
@BeforeClass
public static void init() {
String contribution = ContributionLocationHelper.getContributionLocation(CalendarConsumer.class);
node = NodeFactory.newInstance().createNode(
"org/apache/tuscany/sca/binding/gdata/CalendarConsumer.composite", new Contribution("consumer", contribution));
node.start();
consumer = node.getService(CalendarConsumerImpl.class, "CalendarConsumer");
}
@AfterClass
public static void close() {
node.stop();
node.destroy();
}
@Test
public void getFeed() {
System.out.println("getfeed");
feed = (Feed) consumer.getFeed();
assertNotNull(feed);
}
@Test
public void post() {
System.out.println("post");
EventEntry entry = new EventEntry();
entry.setTitle(new PlainTextConstruct("GSoC extra activity"));
entry.setContent(new PlainTextConstruct("Reading the book Beautiful Code"));
Person author = new Person("GSoC Student 2008", null, "gsocstudent2008@gmail.com");
entry.getAuthors().add(author);
DateTime startTime = DateTime.parseDateTime("2008-07-22T15:00:00-08:00");
DateTime endTime = DateTime.parseDateTime("2008-07-22T17:00:00-08:00");
When eventTimes = new When();
eventTimes.setStartTime(startTime);
eventTimes.setEndTime(endTime);
entry.addTime(eventTimes);
returnedEntry = consumer.post(entry);
assertNotNull(returnedEntry);
}
@Test
public void get() {
System.out.println("get");
try {
searchedEntry = consumer.get(returnedEntry.getSelfLink().getHref());
assertNotNull(searchedEntry);
} catch (NotFoundException ex) {
Logger.getLogger(CalendarConsumerTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Test
public void put() {
System.out.println("put");
try {
searchedEntry.setTitle(new PlainTextConstruct("GSoC extra activity(opcional)"));
updatedEntry = consumer.put(searchedEntry.getEditLink().getHref(), searchedEntry);
assertNotNull(updatedEntry);
} catch (NotFoundException ex) {
Logger.getLogger(CalendarConsumerTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Test
public void delete() {
System.out.println("delete");
try {
consumer.delete(updatedEntry.getEditLink().getHref());
} catch (NotFoundException ex) {
Logger.getLogger(CalendarConsumerTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
@Test
public void query() {
System.out.println("query");
feed = (Feed) consumer.query("Students");
assertNotNull(feed);
}// public void testCustomerCollection() throws Exception {
//
// System.out.println(
// "\n//--------------------------" +
// "\n// Get the Feed" +
// "\n//--------------------------\n");
//
// Feed feed = (Feed) resourceCollection.getFeed();
//
// System.out.println("Feed content - " + feed.getUpdated().toString() + ":\n");
// for (Entry e : feed.getEntries()) {
// System.out.println("# " + e.getTitle().getPlainText());
// }
//
// System.out.println(
// "\n//--------------------------" +
// "\n// Post a new Entry" +
// "\n//--------------------------\n");
//
// EventEntry entry = new EventEntry();
//
// entry.setTitle(new PlainTextConstruct("GSoC extra activity"));
// entry.setContent(new PlainTextConstruct("Reading the book Beautiful Code"));
//
// Person author = new Person("GSoC Student 2008", null, "gsocstudent2008@gmail.com");
// entry.getAuthors().add(author);
//
// DateTime startTime = DateTime.parseDateTime("2008-06-19T15:00:00-08:00");
// DateTime endTime = DateTime.parseDateTime("2008-06-19T17:00:00-08:00");
// When eventTimes = new When();
// eventTimes.setStartTime(startTime);
// eventTimes.setEndTime(endTime);
// entry.addTime(eventTimes);
//
// BaseEntry returnedEntry = resourceCollection.post(entry);
//
// System.out.println("# " + returnedEntry.getTitle().getPlainText());
//
// System.out.println(
// "\n//--------------------------" +
// "\n// Get an Entry" +
// "\n//--------------------------\n");
//
// BaseEntry searchedEntry = resourceCollection.get(returnedEntry.getSelfLink().getHref());
//
// System.out.println("# " + searchedEntry.getTitle().getPlainText());
//
// System.out.println(
// "\n//--------------------------" +
// "\n// Update an Entry" +
// "\n//--------------------------\n");
//
// searchedEntry.setTitle(new PlainTextConstruct("GSoC extra activity(opcional)"));
// BaseEntry updatedEntry = resourceCollection.put(searchedEntry.getEditLink().getHref(), searchedEntry);
//
// System.out.println("# " + updatedEntry.getTitle().getPlainText());
//
// System.out.println(
// "\n//--------------------------" +
// "\n// Delete an Entry" +
// "\n//--------------------------\n");
//
// resourceCollection.delete(updatedEntry.getEditLink().getHref());
//
// System.out.println(
// "\n//--------------------------" +
// "\n// Execute a query" +
// "\n//--------------------------\n");
//
// feed = (Feed) resourceCollection.query("Students");
//
// System.out.println("Feed content - " + feed.getUpdated().toString() + ":\n");
// for (Entry e : feed.getEntries()) {
// System.out.println("# " + e.getTitle().getPlainText());
// }
//
// }
}

View file

@ -1,42 +0,0 @@
/*
* 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.sca.binding.gdata.consumerprovider;
import org.apache.tuscany.sca.node.Contribution;
import org.apache.tuscany.sca.node.ContributionLocationHelper;
import org.apache.tuscany.sca.node.Node;
import org.apache.tuscany.sca.node.NodeFactory;
public class Consumer {
public static void main(String[] args) throws Exception {
String contribution = ContributionLocationHelper.getContributionLocation(Consumer.class);
Node node = NodeFactory.newInstance().createNode(
"org/apache/tuscany/sca/binding/gdata/Consumer.composite", new Contribution("consumer", contribution));
node.start();
CustomerClient testService = node.getService(CustomerClient.class, "CustomerClient");
testService.testCustomerCollection();
node.stop();
node.destroy();
}
}

View file

@ -1,25 +0,0 @@
/*
* 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.sca.binding.gdata.consumerprovider;
public interface CustomerClient {
void testCustomerCollection() throws Exception;
}

View file

@ -1,117 +0,0 @@
/*
* 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.sca.binding.gdata.consumerprovider;
import com.google.gdata.data.BaseEntry;
import com.google.gdata.data.BaseFeed;
import com.google.gdata.data.DateTime;
import com.google.gdata.data.Entry;
import com.google.gdata.data.Feed;
import com.google.gdata.data.Person;
import com.google.gdata.data.PlainTextConstruct;
import com.google.gdata.data.Source;
import com.google.gdata.data.extensions.EventEntry;
import com.google.gdata.data.extensions.When;
import org.apache.tuscany.sca.binding.gdata.collection.Collection;
import org.osoa.sca.annotations.Reference;
import org.osoa.sca.annotations.Scope;
@Scope("COMPOSITE")
public class CustomerClientImpl implements CustomerClient {
@Reference
public Collection resourceCollection;
public void testCustomerCollection() throws Exception {
System.out.println(
"\n//--------------------------" +
"\n// Get the Feed" +
"\n//--------------------------\n");
BaseFeed<? extends BaseFeed, ? extends BaseEntry> feed = resourceCollection.getFeed();
System.out.println("Feed content - " + feed.getUpdated().toString() + ":\n");
for (BaseEntry e : feed.getEntries()) {
System.out.println("# " + e.getTitle().getPlainText());
}
System.out.println(
"\n//--------------------------" +
"\n// Post a new Entry" +
"\n//--------------------------\n");
EventEntry entry = new EventEntry();
entry.setTitle(new PlainTextConstruct("Activity"));
entry.setContent(new PlainTextConstruct("Reading the book Beautiful Code"));
Person author = new Person("GSoC Student 2008", null, "gsocstudent2008@gmail.com");
entry.getAuthors().add(author);
DateTime startTime = DateTime.parseDateTime("2008-06-19T15:00:00-08:00");
DateTime endTime = DateTime.parseDateTime("2008-06-19T17:00:00-08:00");
When eventTimes = new When();
eventTimes.setStartTime(startTime);
eventTimes.setEndTime(endTime);
entry.addTime(eventTimes);
BaseEntry returnedEntry = resourceCollection.post(entry);
System.out.println("# " + returnedEntry.getTitle().getPlainText());
System.out.println(
"\n//--------------------------" +
"\n// Get an Entry" +
"\n//--------------------------\n");
BaseEntry searchedEntry = resourceCollection.get(returnedEntry.getId());
System.out.println("# " + searchedEntry.getTitle().getPlainText());
System.out.println(
"\n//--------------------------" +
"\n// Update an Entry" +
"\n//--------------------------\n");
searchedEntry.setTitle(new PlainTextConstruct("Activity (opcional)"));
BaseEntry updatedEntry = resourceCollection.put(searchedEntry.getId(), searchedEntry);
System.out.println("# " + updatedEntry.getTitle().getPlainText());
System.out.println(
"\n//--------------------------" +
"\n// Delete an Entry" +
"\n//--------------------------\n");
resourceCollection.delete(updatedEntry.getId());
System.out.println(
"\n//--------------------------" +
"\n// Execute a query" +
"\n//--------------------------\n");
feed = (Feed)(Source) resourceCollection.query("GSoC");
System.out.println("Feed content - " + feed.getUpdated().toString() + ":\n");
for (BaseEntry e : feed.getEntries()) {
System.out.println("# " + e.getTitle().getPlainText());
}
}
}

View file

@ -1,116 +0,0 @@
/*
* 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.sca.binding.gdata.consumerprovider;
import com.google.gdata.data.BaseEntry;
import com.google.gdata.data.BaseFeed;
import com.google.gdata.data.DateTime;
import com.google.gdata.data.Entry;
import com.google.gdata.data.Feed;
import com.google.gdata.data.PlainTextConstruct;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;
import java.util.UUID;
import org.apache.tuscany.sca.binding.gdata.collection.Collection;
import org.apache.tuscany.sca.data.collection.NotFoundException;
import org.osoa.sca.annotations.Scope;
@Scope("COMPOSITE")
public class CustomerCollectionImpl implements Collection {
private Map<String, BaseEntry> entries;
public CustomerCollectionImpl() {
entries = new HashMap<String, BaseEntry>();
BaseEntry entry = new Entry();
entry.setId("urn:uuid:customer-0");
entry.setTitle(new PlainTextConstruct("An exampling entry - GSoC"));
entries.put(entry.getId(), entry);
}
public BaseFeed<? extends BaseFeed, ? extends BaseEntry> getFeed() {
System.out.println(">>> CustomerCollectionImpl.getFeed");
BaseFeed feed = new Feed();
feed.setTitle(new PlainTextConstruct("Customers Feed"));
feed.setSubtitle(new PlainTextConstruct("This is a sample feed"));
feed.setUpdated(new DateTime());
//FIX-ME
//feed.addHtmlLink("", "", ""); //feed.addLink("");
//feed.addHtmlLink("", "self", ""); //feed.addLink("", "self");
feed.addHtmlLink("http://localhost:8086/customer", "", "");
feed.setEntries(new ArrayList(entries.values()));
return feed;
}
public BaseFeed<? extends BaseFeed, ? extends BaseEntry> query(String queryString) {
System.out.println(">>> CustomerCollectionImpl.query collection " + queryString);
return getFeed();
}
public BaseEntry post(BaseEntry entry) {
System.out.println(">>> CustomerCollectionImpl.post entry=" + entry.getTitle().getPlainText());
String id = "urn:uuid:customer-" + UUID.randomUUID().toString();
entry.setId(id);
//FIX-ME
entry.addHtmlLink("" + id, "edit", "");
entry.addHtmlLink("" + id, "alternate", "");
DateTime dateTime = new DateTime(new Date(), TimeZone.getTimeZone("America/Los_Angeles"));
entry.setUpdated(dateTime);
entries.put(id, entry);
System.out.println(">>> CustomerCollectionImpl.post return id=" + id);
return entry;
}
public BaseEntry get(String id) throws NotFoundException {
System.out.println(">>> CustomerCollectionImpl.get id=" + id);
return entries.get(id);
}
public BaseEntry put(String id, BaseEntry entry) throws NotFoundException {
System.out.println(">>> CustomerCollectionImpl.put id=" + id + " entry=" + entry.getTitle());
DateTime dateTime = new DateTime(new Date(), TimeZone.getTimeZone("America/Los_Angeles"));
entry.setUpdated(dateTime);
entries.put(id, entry);
return entries.get(id);
}
public void delete(String id) throws NotFoundException {
System.out.println(">>> CustomerCollectionImpl.delete id=" + id);
entries.remove(id);
}
}

View file

@ -1,40 +0,0 @@
/*
* 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.sca.binding.gdata.consumerprovider;
import org.apache.tuscany.sca.node.Contribution;
import org.apache.tuscany.sca.node.ContributionLocationHelper;
import org.apache.tuscany.sca.node.Node;
import org.apache.tuscany.sca.node.NodeFactory;
public class Provider {
public static void main(String[] args) throws Exception {
String contribution = ContributionLocationHelper.getContributionLocation(Provider.class);
Node node = NodeFactory.newInstance().createNode(
"org/apache/tuscany/sca/binding/gdata/Provider.composite", new Contribution("provider", contribution));
node.start();
System.out.println("Ready for consultings...");
System.in.read();
node.stop();
node.destroy();
}
}

View file

@ -1,32 +0,0 @@
<?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://www.osoa.org/xmlns/sca/1.0"
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
targetNamespace="http://customer"
name="CalendarConsumerComposite">
<component name="CalendarConsumer">
<implementation.java class="org.apache.tuscany.sca.binding.gdata.calendarconsumer.CalendarConsumerImpl"/>
<reference name="resourceCollection">
<tuscany:binding.gdata uri="http://www.google.com/calendar/feeds/gsocstudent2008@gmail.com/private/full" serviceType="cl" username="gsocstudent2008@gmail.com" password="gsoc2008"/>
</reference>
</component>
</composite>

View file

@ -1,32 +0,0 @@
<?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://www.osoa.org/xmlns/sca/1.0"
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
targetNamespace="http://customer"
name="Consumer">
<component name="CustomerClient">
<implementation.java class="org.apache.tuscany.sca.binding.gdata.consumerprovider.CustomerClientImpl"/>
<reference name="resourceCollection">
<tuscany:binding.gdata uri="http://localhost:8086/customer" username="gsocstudent2008" password="gsoc2008" serviceType="sca"/>
</reference>
</component>
</composite>

View file

@ -1,33 +0,0 @@
<?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://www.osoa.org/xmlns/sca/1.0"
xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0"
targetNamespace = "http://customer"
name="Provider">
<service name="customer" promote="CustomerCollection">
<tuscany:binding.gdata uri = "http://localhost:8086/customer" username="gsocstudent2008" password="gsoc2008" serviceType="cl"/>
</service>
<component name="CustomerCollection">
<implementation.java class="org.apache.tuscany.sca.binding.gdata.consumerprovider.CustomerCollectionImpl"/>
</component>
</composite>

View file

@ -1,205 +0,0 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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.

View file

@ -1 +0,0 @@
This directory contains a generated MANIFEST.MF file.

View file

@ -1,6 +0,0 @@
${pom.name}
Copyright (c) 2005 - 2008 The Apache Software Foundation
This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).

View file

@ -1,73 +0,0 @@
<?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>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-modules</artifactId>
<version>1.4-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>tuscany-binding-gdata2</artifactId>
<name>Apache Tuscany SCA Gdata Binding Extension GSOC</name>
<dependencies>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-assembly</artifactId>
<version>1.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.apache.tuscany.sca</groupId>
<artifactId>tuscany-assembly-xml</artifactId>
<version>1.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.5</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Bundle-Version>${tuscany.version}</Bundle-Version>
<Bundle-SymbolicName>org.apache.tuscany.sca.binding.gdata2</Bundle-SymbolicName>
<Bundle-Description>${pom.name}</Bundle-Description>
<Export-Package>org.apache.tuscany.sca.binding.gdata</Export-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>

View file

@ -1,77 +0,0 @@
/*
* 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.sca.binding.gdata;
import org.apache.tuscany.sca.assembly.Binding;
/**
* GData binding model.
*
* @version $Rev$ $Date$
*/
public interface GDataBinding extends Binding {
/**
* Returns the title of the Atom collection.
* @return
*/
String getTitle();
/**
* Sets the title of the Atom collection.
* @param title
*/
void setTitle(String title);
/*
* Returns the username of a Google account
* @return
*/
String getUsername();
/*
* Sets the username of a Google account
* @param username
*/
void setUsername(String username);
/*
* Returns the password of a Google account
* @return
*/
String getPassword();
/*
* Sets the password of a Google account
* @param password
*/
void setPassword(String password);
/*
* Retruns the name of the Google service to which we are connecting. Sample names of services might include "cl" (Calendar), "mail" (GMail), or "blogger" (Blogger)
* @return
*/
String getServiceType();
/*
* Sets the name of the Google service to which we are connecting. Sample names of services might include "cl" (Calendar), "mail" (GMail), or "blogger" (Blogger)
* @param serviceType
*/
void setServiceType(String serviceType);
}

View file

@ -1,35 +0,0 @@
/*
* 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.sca.binding.gdata;
/**
* Factory for the GData binding
*
* @version $Rev$ $Date$
*/
public interface GDataBindingFactory {
/**
* Creates a new Atom binding.
* @return the new Atom binding
*/
GDataBinding createAtomBinding();
}

View file

@ -1,36 +0,0 @@
/*
* 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.sca.binding.gdata.impl;
import org.apache.tuscany.sca.binding.gdata.GDataBinding;
import org.apache.tuscany.sca.binding.gdata.GDataBindingFactory;
/**
* Factory for the GData binding model.
*
* @version $Rev$ $Date$
*/
public class GDataBindingFactoryImpl implements GDataBindingFactory {
public GDataBinding createAtomBinding() {
return new GDataBindingImpl();
}
}

View file

@ -1,137 +0,0 @@
/*
* 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.sca.binding.gdata.impl;
import java.util.ArrayList;
import java.util.List;
import org.apache.tuscany.sca.binding.gdata.GDataBinding;
import org.apache.tuscany.sca.policy.Intent;
import org.apache.tuscany.sca.policy.IntentAttachPointType;
import org.apache.tuscany.sca.policy.PolicySet;
import org.apache.tuscany.sca.policy.PolicySetAttachPoint;
/**
* Implementation of the GData binding model.
*
* @version $Rev$ $Date$
*/
class GDataBindingImpl implements GDataBinding, PolicySetAttachPoint {
private String password;
private String username;
private String name;
private String serviceType;
private String uri;
private String title;
private List<Intent> requiredIntents = new ArrayList<Intent>();
private List<PolicySet> policySets = new ArrayList<PolicySet>();
private IntentAttachPointType intentAttachPointType;
private List<PolicySet> applicablePolicySets = new ArrayList<PolicySet>();
public List<PolicySet> getApplicablePolicySets() {
return applicablePolicySets;
}
public String getName() {
return name;
}
public String getURI() {
return uri;
}
public void setName(String name) {
this.name = name;
}
public void setURI(String uri) {
this.uri = uri;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public boolean isUnresolved() {
// The binding is always resolved
return false;
}
public void setUnresolved(boolean unresolved) {
// The binding is always resolved
}
public List<PolicySet> getPolicySets() {
return policySets;
}
public List<Intent> getRequiredIntents() {
return requiredIntents;
}
public IntentAttachPointType getType() {
return intentAttachPointType;
}
public void setType(IntentAttachPointType intentAttachPointType) {
this.intentAttachPointType = intentAttachPointType;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
public void setPolicySets(List<PolicySet> policySets) {
this.policySets = policySets;
}
public void setRequiredIntents(List<Intent> intents) {
this.requiredIntents = intents;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public String getServiceType() {
return this.serviceType;
}
public void setServiceType(String serviceType) {
this.serviceType = serviceType;
}
}

View file

@ -1,102 +0,0 @@
/*
* 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.sca.binding.gdata.xml;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import org.apache.tuscany.sca.assembly.xml.Constants;
import org.apache.tuscany.sca.binding.gdata.GDataBinding;
import org.apache.tuscany.sca.binding.gdata.GDataBindingFactory;
import org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import org.apache.tuscany.sca.core.FactoryExtensionPoint;
import org.apache.tuscany.sca.monitor.Monitor;
public class GDataImplementationProcessor implements StAXArtifactProcessor<GDataBinding> {
private GDataBindingFactory gdataFactory;
protected static final QName BINDING_GDATA = new QName(Constants.SCA10_TUSCANY_NS, "binding.gdata");
public GDataImplementationProcessor(FactoryExtensionPoint modelFactories, Monitor monitor) {
this.gdataFactory = (GDataBindingFactory) modelFactories.getFactory(GDataBindingFactory.class);
}
public GDataBinding read(XMLStreamReader reader) {
assert BINDING_GDATA.equals(reader.getName());
GDataBinding gdataBinding = gdataFactory.createAtomBinding();
/*
* <tuscany:binding.gdata uri="..."
* login="..."
* password="..."/>
*/
String uri = reader.getAttributeValue(null, "uri");
String serviceType = reader.getAttributeValue(null, "serviceType");
String login = reader.getAttributeValue(null, "username");
String password = reader.getAttributeValue(null, "password");
gdataBinding.setURI(uri);
gdataBinding.setServiceType(serviceType);
gdataBinding.setUsername(login);
gdataBinding.setPassword(password);
return gdataBinding;
}
public void write(GDataBinding gdataBinding, XMLStreamWriter writer) throws XMLStreamException {
if (gdataBinding != null) {
writer.writeStartElement(BINDING_GDATA.getNamespaceURI(), BINDING_GDATA.getLocalPart());
if (gdataBinding.getURI() != null) {
writer.writeAttribute("uri", gdataBinding.getURI());
}
if (gdataBinding.getServiceType() != null) {
writer.writeAttribute("serviceType", gdataBinding.getServiceType());
}
if (gdataBinding.getUsername() != null) {
writer.writeAttribute("username", gdataBinding.getUsername());
}
if (gdataBinding.getPassword() != null) {
writer.writeAttribute("password", gdataBinding.getPassword());
}
writer.writeEndElement();
}
}
public QName getArtifactType() {
return BINDING_GDATA;
}
public void resolve(GDataBinding arg0, ModelResolver arg1) throws ContributionResolveException {
}
public Class<GDataBinding> getModelType() {
return GDataBinding.class;
}
}

View file

@ -1,19 +0,0 @@
# 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.
# Implementation class for the model factory
org.apache.tuscany.sca.binding.gdata.impl.GDataBindingFactoryImpl

View file

@ -1,21 +0,0 @@
# 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.
# Implementation class for the artifact processor extension
#org.apache.tuscany.sca.assembly.xml.DefaultBeanModelProcessor;qname=http://tuscany.apache.org/xmlns/sca/1.0#binding.gdata,model=org.apache.tuscany.sca.binding.gdata.GDataBinding,factory=org.apache.tuscany.sca.binding.gdata.GDataBindingFactory
org.apache.tuscany.sca.binding.gdata.xml.GDataImplementationProcessor;qname=http://tuscany.apache.org/xmlns/sca/1.0#binding.gdata,model=org.apache.tuscany.sca.binding.gdata.GDataBinding,factory=org.apache.tuscany.sca.binding.gdata.GDataBindingFactory

View file

@ -51,8 +51,6 @@
<module>binding-atom-abdera</module>
<module>binding-gdata</module>
<module>binding-gdata-runtime</module>
<module>binding-gdata2</module>
<module>binding-gdata2-runtime</module>
<module>binding-http</module>
<module>binding-http-runtime</module>
<module>binding-jms</module>