/**
* Copyright © Microsoft Open Technologies, Inc.
*
* All Rights Reserved
*
* 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
*
* THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS
* OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
* ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A
* PARTICULAR PURPOSE, MERCHANTABILITY OR NON-INFRINGEMENT.
*
* See the Apache License, Version 2.0 for the specific language
* governing permissions and limitations under the License.
*/
package com.msopentech.odatajclient.engine.data;
import com.msopentech.odatajclient.engine.data.atom.AtomEntry;
import com.msopentech.odatajclient.engine.data.atom.AtomFeed;
import com.msopentech.odatajclient.engine.data.atom.AtomLink;
import com.msopentech.odatajclient.engine.data.json.JSONEntry;
import com.msopentech.odatajclient.engine.data.json.JSONFeed;
import com.msopentech.odatajclient.engine.data.json.JSONLink;
import com.msopentech.odatajclient.engine.format.ODataPubFormat;
public class ResourceFactory {
/**
* Gets a new instance of
* <code>FeedResource</code>.
*
* @param <T> resource type.
* @param resourceClass reference class.
* @return <code>FeedResource</code> object.
*/
@SuppressWarnings("unchecked")
public static <T extends FeedResource> T newFeed(final Class<T> resourceClass) {
T result = null;
if (AtomFeed.class.equals(resourceClass)) {
result = (T) new AtomFeed();
}
if (JSONFeed.class.equals(resourceClass)) {
result = (T) new JSONFeed();
}
return result;
}
/**
* Gets a new instance of
* <code>EntryResource</code>.
*
* @param <T> resource type.
* @param resourceClass reference class.
* @return <code>EntryResource</code> object.
*/
@SuppressWarnings("unchecked")
public static <T extends EntryResource> T newEntry(final Class<T> resourceClass) {
T result = null;
if (AtomEntry.class.equals(resourceClass)) {
result = (T) new AtomEntry();
}
if (JSONEntry.class.equals(resourceClass)) {
result = (T) new JSONEntry();
}
return result;
}
/**
* Gets a new instance of
* <code>LinkResource</code>.
*
* @param <T> resource type.
* @param resourceClass reference class.
* @return <code>LinkResource</code> object.
*/
@SuppressWarnings("unchecked")
public static <T extends LinkResource> T newLink(final Class<T> resourceClass) {
T result = null;
if (AtomLink.class.equals(resourceClass)) {
result = (T) new AtomLink();
}
if (JSONLink.class.equals(resourceClass)) {
result = (T) new JSONLink();
}
return result;
}
/**
* Gets feed reference class from the given format.
*
* @param <T> resource type.
* @param format format.
* @return resource reference class.
*/
@SuppressWarnings("unchecked")
public static <T extends FeedResource> Class<T> feedClassForFormat(final ODataPubFormat format) {
Class<T> result = null;
switch (format) {
case ATOM:
result = (Class<T>) AtomFeed.class;
break;
case JSON:
case JSON_FULL_METADATA:
case JSON_NO_METADATA:
case JSON_VERBOSE_METADATA:
result = (Class<T>) JSONFeed.class;
break;
}
return result;
}
/**
* Gets entry reference class from the given format.
*
* @param <T> resource type.
* @param format format.
* @return resource reference class.
*/
@SuppressWarnings("unchecked")
public static <T extends EntryResource> Class<T> entryClassForFormat(final ODataPubFormat format) {
Class<T> result = null;
switch (format) {
case ATOM:
result = (Class<T>) AtomEntry.class;
break;
case JSON:
case JSON_FULL_METADATA:
case JSON_NO_METADATA:
case JSON_VERBOSE_METADATA:
result = (Class<T>) JSONEntry.class;
break;
}
return result;
}
/**
* Gets
* <code>LinkResource</code> object from feed resource.
*
* @param <T> link resource type.
* @param <K> feed resource type.
* @param resourceClass feed reference class.
* @return <code>LinkResource</code> object.
*/
@SuppressWarnings("unchecked")
public static <T extends LinkResource, K extends FeedResource> T newLinkForFeed(final Class<K> resourceClass) {
T result = null;
if (AtomFeed.class.equals(resourceClass)) {
result = (T) new AtomLink();
}
if (JSONFeed.class.equals(resourceClass)) {
result = (T) new JSONLink();
}
return result;
}
/**
* Gets
* <code>LinkResource</code> object from entry resource.
*
* @param <T> link resource type.
* @param <K> entry resource type.
* @param resourceClass entry reference class.
* @return <code>LinkResource</code> object.
*/
@SuppressWarnings("unchecked")
public static <T extends LinkResource, K extends EntryResource> T newLinkForEntry(final Class<K> resourceClass) {
T result = null;
if (AtomEntry.class.equals(resourceClass)) {
result = (T) new AtomLink();
}
if (JSONEntry.class.equals(resourceClass)) {
result = (T) new JSONLink();
}
return result;
}
/**
* Gets
* <code>FeedResource</code> object from link resource.
*
* @param <T> link resource type.
* @param <K> feed resource type.
* @param resourceClass link reference class.
* @return <code>FeedResource</code> object.
*/
@SuppressWarnings("unchecked")
public static <T extends LinkResource, K extends FeedResource> Class<K> feedClassForLink(
final Class<T> resourceClass) {
Class<K> result = null;
if (AtomLink.class.equals(resourceClass)) {
result = (Class<K>) AtomFeed.class;
}
if (JSONLink.class.equals(resourceClass)) {
result = (Class<K>) JSONFeed.class;
}
return result;
}
/**
* Gets
* <code>LinkResource</code> object from entry resource.
*
* @param <T> link resource type.
* @param <K> entry resource type.
* @param resourceClass entry reference class.
* @return <code>LinkResource</code> object.
*/
@SuppressWarnings("unchecked")
public static <T extends LinkResource, K extends EntryResource> Class<T> linkClassForEntry(
final Class<K> resourceClass) {
Class<T> result = null;
if (AtomEntry.class.equals(resourceClass)) {
result = (Class<T>) AtomLink.class;
}
if (JSONEntry.class.equals(resourceClass)) {
result = (Class<T>) JSONLink.class;
}
return result;
}
/**
* Gets
* <code>EntryResource</code> object from link resource.
*
* @param <T> link resource type.
* @param <K> entry resource type.
* @param resourceClass link reference class.
* @return <code>EntryResource</code> object.
*/
@SuppressWarnings("unchecked")
public static <T extends LinkResource, K extends EntryResource> Class<K> entryClassForLink(
final Class<T> resourceClass) {
Class<K> result = null;
if (AtomLink.class.equals(resourceClass)) {
result = (Class<K>) AtomEntry.class;
}
if (JSONLink.class.equals(resourceClass)) {
result = (Class<K>) JSONEntry.class;
}
return result;
}
/**
* Gets
* <code>EntryResource</code> object from feed resource.
*
* @param <T> feed resource type.
* @param <K> entry resource type.
* @param resourceClass feed reference class.
* @return <code>EntryResource</code> object.
*/
@SuppressWarnings("unchecked")
public static <T extends FeedResource, K extends EntryResource> Class<K> entryClassForFeed(
final Class<T> resourceClass) {
Class<K> result = null;
if (AtomFeed.class.equals(resourceClass)) {
result = (Class<K>) AtomEntry.class;
}
if (JSONFeed.class.equals(resourceClass)) {
result = (Class<K>) JSONEntry.class;
}
return result;
}
}