/*
*
* This is a simple Content Management System (CMS)
* Copyright (C) 2010 Imran M Yousuf (imyousuf@smartitengineering.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.smartitengineering.cms.client.impl;
import com.google.inject.AbstractModule;
import com.smartitengineering.cms.api.common.TemplateType;
import com.smartitengineering.cms.api.content.MutableContent;
import com.smartitengineering.cms.api.content.MutableField;
import com.smartitengineering.cms.api.content.MutableFieldValue;
import com.smartitengineering.cms.api.event.Event;
import com.smartitengineering.cms.api.event.Event.EventType;
import com.smartitengineering.cms.api.event.EventListener;
import com.smartitengineering.cms.api.factory.SmartContentAPI;
import com.smartitengineering.cms.api.factory.content.WriteableContent;
import com.smartitengineering.cms.api.factory.type.ContentTypeLoader;
import com.smartitengineering.cms.api.factory.type.WritableContentType;
import com.smartitengineering.cms.api.factory.workspace.WorkspaceAPI;
import com.smartitengineering.cms.api.impl.type.ContentTypeIdImpl;
import com.smartitengineering.cms.api.type.*;
import com.smartitengineering.cms.api.type.ContentType.ContentProcessingPhase;
import com.smartitengineering.cms.api.workspace.Sequence;
import com.smartitengineering.cms.api.workspace.WorkspaceId;
import com.smartitengineering.cms.binder.guice.Initializer;
import com.smartitengineering.cms.client.api.ContainerResource;
import com.smartitengineering.cms.client.api.ContentResource;
import com.smartitengineering.cms.client.api.ContentSearcherResource;
import com.smartitengineering.cms.client.api.ContentTypeFeedResource;
import com.smartitengineering.cms.client.api.ContentTypeResource;
import com.smartitengineering.cms.client.api.ContentTypesResource;
import com.smartitengineering.cms.client.api.ContentsResource;
import com.smartitengineering.cms.client.api.FieldResource;
import com.smartitengineering.cms.client.api.RootResource;
import com.smartitengineering.cms.client.api.UriTemplateResource;
import com.smartitengineering.cms.client.api.WorkspaceContentCoProcessorResource;
import com.smartitengineering.cms.client.api.WorkspaceContentCoProcessorsResource;
import com.smartitengineering.cms.client.api.WorkspaceContentResouce;
import com.smartitengineering.cms.client.api.WorkspaceFeedResource;
import com.smartitengineering.cms.client.api.WorkspaceFriendsResource;
import com.smartitengineering.cms.client.api.WorkspaceRepresentationResource;
import com.smartitengineering.cms.client.api.WorkspaceRepresentationsResource;
import com.smartitengineering.cms.client.api.WorkspaceSequenceResource;
import com.smartitengineering.cms.client.api.WorkspaceSequencesResource;
import com.smartitengineering.cms.client.api.WorkspaceValidatorResource;
import com.smartitengineering.cms.client.api.WorkspaceValidatorsResource;
import com.smartitengineering.cms.client.api.WorkspaceVariationResource;
import com.smartitengineering.cms.client.api.WorkspaceVariationsResource;
import com.smartitengineering.cms.ws.common.domains.CollectionFieldDef;
import com.smartitengineering.cms.ws.common.domains.CollectionFieldValue;
import com.smartitengineering.cms.ws.common.domains.CompositeFieldDef;
import com.smartitengineering.cms.ws.common.domains.CompositeFieldValue;
import com.smartitengineering.cms.ws.common.domains.Content;
import com.smartitengineering.cms.ws.common.domains.EnumFieldDef;
import com.smartitengineering.cms.ws.common.domains.Field;
import com.smartitengineering.cms.ws.common.domains.FieldImpl;
import com.smartitengineering.cms.ws.common.domains.FieldValue;
import com.smartitengineering.cms.ws.common.domains.FieldValueImpl;
import com.smartitengineering.cms.ws.common.domains.OtherFieldValueImpl;
import com.smartitengineering.cms.ws.common.domains.ResourceTemplateImpl;
import com.smartitengineering.cms.ws.common.domains.Workspace;
import com.smartitengineering.cms.ws.common.domains.WorkspaceImpl.WorkspaceIdImpl;
import com.smartitengineering.cms.ws.common.providers.JacksonJsonProvider;
import com.smartitengineering.cms.ws.common.providers.TextURIListProvider;
import com.smartitengineering.dao.hbase.ddl.HBaseTableGenerator;
import com.smartitengineering.dao.hbase.ddl.config.json.ConfigurationJsonParser;
import com.smartitengineering.util.bean.guice.GuiceUtil;
import com.smartitengineering.util.rest.client.ApplicationWideClientFactoryImpl;
import com.smartitengineering.util.rest.client.ClientUtil;
import com.smartitengineering.util.rest.client.ConnectionConfig;
import com.smartitengineering.util.rest.client.ResourceLink;
import com.smartitengineering.util.rest.client.jersey.cache.CacheableClient;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.atom.abdera.impl.provider.entity.FeedProvider;
import com.sun.jersey.core.util.MultivaluedMapImpl;
import com.sun.jersey.multipart.FormDataMultiPart;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import org.apache.abdera.i18n.iri.IRI;
import org.apache.abdera.model.Feed;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.mutable.MutableInt;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.zookeeper.MiniZooKeeperCluster;
import org.codehaus.jackson.map.ObjectMapper;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.util.ConcurrentHashSet;
import org.eclipse.jetty.webapp.WebAppClassLoader;
import org.eclipse.jetty.webapp.WebAppContext;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Unit test for simple App.
*/
public class AppTest {
public static final int SLEEP_DURATION = 3000;
private static final int PORT = 10080;
public static final String DEFAULT_NS = "com.smartitengineering";
public static final String ROOT_URI_STRING = "http://localhost:" + PORT + "/cms/";
public static final String TEST = "test";
public static final String TEST_NS = "testNS";
private static final MiniZooKeeperCluster ZOO_KEEPER_CLUSTER = new MiniZooKeeperCluster();
private static HBaseTestingUtility TEST_UTIL;
private static final Logger LOGGER = LoggerFactory.getLogger(AppTest.class);
private static Server jettyServer;
@BeforeClass
public static void globalSetup() throws Exception {
/*
* Start HBase and initialize tables
*/
//-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
try {
ZOO_KEEPER_CLUSTER.setClientPort(2181);
File file = new File("./target/zk-server/");
file.mkdirs();
ZOO_KEEPER_CLUSTER.startup(file);
TEST_UTIL = new HBaseTestingUtility();
TEST_UTIL.setZkCluster(ZOO_KEEPER_CLUSTER);
TEST_UTIL.startMiniCluster();
}
catch (Exception ex) {
LOGGER.error(ex.getMessage(), ex);
}
new HBaseTableGenerator(ConfigurationJsonParser.getConfigurations(AppTest.class.getClassLoader().getResourceAsStream(
"com/smartitengineering/cms/spi/impl/schema.json")), TEST_UTIL.getConfiguration(), true).generateTables();
/*
* Ensure DIs done
*/
Properties properties = new Properties();
properties.setProperty(GuiceUtil.CONTEXT_NAME_PROP,
"com.smartitengineering.dao.impl.hbase,com.smartitengineering.user.client");
properties.setProperty(GuiceUtil.IGNORE_MISSING_DEP_PROP, Boolean.TRUE.toString());
properties.setProperty(GuiceUtil.MODULES_LIST_PROP, ConfigurationModule.class.getName());
GuiceUtil.getInstance(properties).register();
Initializer.init();
/*
* Start web application container
*/
jettyServer = new Server(PORT);
HandlerList handlerList = new HandlerList();
/*
* The following is for solr for later, when this is to be used it
*/
System.setProperty("solr.solr.home", "./target/sample-conf/");
Handler solr = new WebAppContext("./target/solr/", "/solr");
handlerList.addHandler(solr);
WebAppContext hub = new WebAppContext("./target/hub/", "/hub");
final WebAppClassLoader webAppClassLoader = new WebAppClassLoader(hub);
hub.setClassLoader(webAppClassLoader);
handlerList.addHandler(hub);
final String webapp = "./src/test/webapp/";
if (!new File(webapp).exists()) {
throw new IllegalStateException("WebApp file/dir does not exist!");
}
WebAppContext webAppHandler = new WebAppContext(webapp, "/cms");
handlerList.addHandler(webAppHandler);
jettyServer.setHandler(handlerList);
jettyServer.setSendDateHeader(true);
jettyServer.start();
/*
* Setup client properties
*/
System.setProperty(ApplicationWideClientFactoryImpl.TRACE, "true");
Client client = CacheableClient.create();
client.resource("http://localhost:10080/hub/api/channels/test").header(HttpHeaders.CONTENT_TYPE,
MediaType.APPLICATION_JSON).put(
"{\"name\":\"test\"}");
LOGGER.info("Created test channel!");
}
@AfterClass
public static void globalTearDown() throws Exception {
try {
jettyServer.stop();
}
catch (Exception ex) {
LOGGER.warn(ex.getMessage(), ex);
}
try {
TEST_UTIL.shutdownMiniCluster();
}
catch (Exception ex) {
LOGGER.warn(ex.getMessage(), ex);
}
try {
ZOO_KEEPER_CLUSTER.shutdown();
}
catch (Exception ex) {
LOGGER.warn(ex.getMessage(), ex);
}
}
@Test
public void testStartup() throws URISyntaxException {
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Assert.assertNotNull(resource);
Assert.assertEquals(0, resource.getWorkspaces().size());
}
@Test
public void testCreationAndRetrievalWithNameOnly() throws URISyntaxException {
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
final MultivaluedMap<String, String> map = new MultivaluedMapImpl();
map.add("name", TEST);
ClientResponse response = resource.post(MediaType.APPLICATION_FORM_URLENCODED, map, ClientResponse.Status.CREATED);
ResourceLink link = ClientUtil.createResourceLink(WorkspaceContentResouce.WORKSPACE_CONTENT, response.getLocation(),
MediaType.APPLICATION_JSON);
WorkspaceContentResouce workspaceContentResource = new WorkspaceContentResourceImpl(resource, link);
Assert.assertNotNull(workspaceContentResource.getLastReadStateOfEntity());
Workspace workspace = workspaceContentResource.getLastReadStateOfEntity();
Assert.assertEquals(TEST, workspace.getId().getName());
Assert.assertEquals(DEFAULT_NS, workspace.getId().getGlobalNamespace());
Collection<WorkspaceContentResouce> resources = resource.getWorkspaces();
Assert.assertEquals(1, resource.getWorkspaces().size());
workspaceContentResource = resources.iterator().next();
workspace = workspaceContentResource.getLastReadStateOfEntity();
Assert.assertEquals(TEST, workspace.getId().getName());
Assert.assertEquals(DEFAULT_NS, workspace.getId().getGlobalNamespace());
}
@Test
public void testCreationAndRetrievalWithNamespace() throws URISyntaxException {
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
final MultivaluedMap<String, String> map = new MultivaluedMapImpl();
map.add("name", TEST);
map.add("namespace", TEST_NS);
ClientResponse response = resource.post(MediaType.APPLICATION_FORM_URLENCODED, map, ClientResponse.Status.CREATED);
ResourceLink link = ClientUtil.createResourceLink(WorkspaceContentResouce.WORKSPACE_CONTENT, response.getLocation(),
MediaType.APPLICATION_JSON);
WorkspaceContentResouce workspaceContentResource = new WorkspaceContentResourceImpl(resource, link);
Assert.assertNotNull(workspaceContentResource.getLastReadStateOfEntity());
Workspace workspace = workspaceContentResource.getLastReadStateOfEntity();
Assert.assertEquals(TEST, workspace.getId().getName());
Assert.assertEquals(TEST_NS, workspace.getId().getGlobalNamespace());
Collection<WorkspaceContentResouce> resources = resource.getWorkspaces();
Assert.assertEquals(2, resource.getWorkspaces().size());
workspaceContentResource = resources.iterator().next();
workspace = workspaceContentResource.getLastReadStateOfEntity();
Assert.assertEquals(TEST, workspace.getId().getName());
Assert.assertEquals(TEST_NS, workspace.getId().getGlobalNamespace());
}
@Test
public void testConditionalRootResourceGet() throws Exception {
final String uri = ROOT_URI_STRING;
testConditionalGetUsingLastModified(uri);
}
@Test
public void testConditionalWorkspaceContentResourceGet() throws Exception {
final String uri = ROOT_URI_STRING;
RootResource resource = RootResourceImpl.getRoot(new URI(uri));
Collection<WorkspaceContentResouce> resouces = resource.getWorkspaces();
for (WorkspaceContentResouce contentResouce : resouces) {
testConditionalGetUsingLastModified(contentResouce.getUri().toString());
}
}
@Test
public void testCreateWorkspace() throws Exception {
WorkspaceIdImpl workspaceId = new WorkspaceIdImpl();
workspaceId.setName("this is a test");
workspaceId.setGlobalNamespace("a test namespace");
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
int size = resource.getWorkspaces().size();
Workspace workspace = resource.createWorkspace(workspaceId);
Assert.assertEquals(workspaceId.getName(), workspace.getId().getName());
Assert.assertEquals(workspaceId.getGlobalNamespace(), workspace.getId().getGlobalNamespace());
Feed feed = resource.get();
Assert.assertNotNull(feed);
Assert.assertEquals(size + 1, resource.getWorkspaces().size());
}
@Test
public void testWorkspaceExists() throws Exception {
final RootResource root = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
root.get();
final Iterator<WorkspaceFeedResource> iterator = root.getWorkspaceFeeds().iterator();
WorkspaceFeedResource feedResource = iterator.next();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(new StringBuilder("Total no of workspace created in test : ").append(root.getWorkspaceFeeds().size()).
toString());
}
Assert.assertNotNull(feedResource);
feedResource = iterator.next();
Assert.assertNotNull(feedResource);
feedResource = iterator.next();
Assert.assertNotNull(feedResource);
Assert.assertEquals(3, root.getWorkspaceFeeds().size());
}
@Test
public void testAddFriend() throws Exception {
final RootResource rootResource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
rootResource.get();
final Iterator<WorkspaceFeedResource> iterator = rootResource.getWorkspaceFeeds().iterator();
WorkspaceFeedResource feedResource = iterator.next();
WorkspaceFriendsResource friendsResource = feedResource.getFriends();
friendsResource.addFriend(new URI(ROOT_URI_STRING + "w/com.smartitengineering/test"));
friendsResource.get();
Collection<URI> frdUri = friendsResource.getLastReadStateOfEntity();
Iterator<URI> frdUris = frdUri.iterator();
Assert.assertEquals(1, frdUri.size());
Assert.assertEquals(ROOT_URI_STRING + "w/com.smartitengineering/test", frdUris.next().toASCIIString());
friendsResource.addFriend(URI.create("/cms/w/a%20test%20namespace/this%20is%20a%20test"));
friendsResource.addFriend(new URI("cms/w/testNS/test"));
WorkspaceFriendsResource newFriendsResource = feedResource.getFriends();
Collection<URI> collection = newFriendsResource.get();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(new StringBuilder("Total no of friend workspace after adding a friend are : ").append(
collection.size()).
toString());
}
Assert.assertEquals(3, collection.size());
frdUris = collection.iterator();
String friendWorkspace = frdUris.next().toASCIIString();
Assert.assertEquals(ROOT_URI_STRING + "w/a%20test%20namespace/this%20is%20a%20test", friendWorkspace);
LOGGER.debug(new StringBuilder("First friend workspace is : ").append(friendWorkspace).toString());
friendWorkspace = frdUris.next().toASCIIString();
Assert.assertEquals(ROOT_URI_STRING + "w/com.smartitengineering/test", friendWorkspace);
LOGGER.debug(new StringBuilder("Second friend workspace is : ").append(friendWorkspace).toString());
friendWorkspace = frdUris.next().toASCIIString();
Assert.assertEquals(ROOT_URI_STRING + "w/testNS/test", friendWorkspace);
LOGGER.debug(new StringBuilder("Third friend workspace is : ").append(friendWorkspace).toString());
}
@Test
public void testDeleteFriend() throws Exception {
final RootResource rootResource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
rootResource.get();
final Iterator<WorkspaceFeedResource> iterator = rootResource.getWorkspaceFeeds().iterator();
WorkspaceFeedResource feedResource = iterator.next();
WorkspaceFriendsResource friendsResource = feedResource.getFriends();
friendsResource.deleteFriend(new URI(ROOT_URI_STRING + "w/com.smartitengineering/test"));
friendsResource.get();
Collection<URI> frdUri = friendsResource.getLastReadStateOfEntity();
Iterator<URI> frdUris = frdUri.iterator();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(new StringBuilder("Total no of friend workspace after deleting a friend is : ").append(frdUri.size()).
toString());
}
// Assert.assertEquals(2, frdUri.size());
// String friendWorkspace = frdUris.next().toASCIIString();
// Assert.assertEquals(ROOT_URI_STRING + "w/a%20test%20namespace/this%20is%20a%20test", friendWorkspace);
// LOGGER.debug(new StringBuilder("First friend workspace is : ").append(friendWorkspace).toString());
// friendWorkspace = frdUris.next().toASCIIString();
// Assert.assertEquals(ROOT_URI_STRING + "w/testNS/test", friendWorkspace);
// LOGGER.debug(new StringBuilder("Second friend workspace is : ").append(friendWorkspace).toString());
}
@Test
public void testReplaceAllFriends() throws Exception {
Collection<URI> uris = new ArrayList<URI>();
final RootResource rootResource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
final MultivaluedMap<String, String> map = new MultivaluedMapImpl();
map.add("name", "additional");
map.add("namespace", "atest2");
rootResource.post(MediaType.APPLICATION_FORM_URLENCODED, map, ClientResponse.Status.CREATED);
rootResource.get();
final Iterator<WorkspaceFeedResource> iterator = rootResource.getWorkspaceFeeds().iterator();
WorkspaceFeedResource feedResource = iterator.next();
WorkspaceFriendsResource friendsResource = feedResource.getFriends();
uris.add(new URI(ROOT_URI_STRING + "w/atest2/additional"));
uris.add(new URI(ROOT_URI_STRING + "w/com.smartitengineering/test"));
friendsResource.replaceAllFriends(uris);
friendsResource.get();
Collection<URI> frdUri = friendsResource.getLastReadStateOfEntity();
Iterator<URI> frdUris = frdUri.iterator();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(new StringBuilder("Total no of friend workspace after replace all friends are : ").append(
frdUri.size()).toString());
}
Assert.assertEquals(2, frdUri.size());
final String friendWS1 = frdUris.next().toASCIIString();
Assert.assertEquals(ROOT_URI_STRING + "w/atest2/additional", friendWS1);
LOGGER.debug(new StringBuilder("First friend after replacing is : ").append(friendWS1).toString());
final String friendWS2 = frdUris.next().toASCIIString();
Assert.assertEquals(ROOT_URI_STRING + "w/com.smartitengineering/test", friendWS2);
LOGGER.debug(new StringBuilder("Second friend after replacing is : ").append(friendWS2).toString());
}
@Test
public void testDeleteAllFriends() throws Exception {
final RootResource rootResource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
rootResource.get();
final Iterator<WorkspaceFeedResource> iterator = rootResource.getWorkspaceFeeds().iterator();
WorkspaceFeedResource feedResource = iterator.next();
WorkspaceFriendsResource friendsResource = feedResource.getFriends();
friendsResource.deleteAllFriends();
friendsResource.get();
Collection<URI> frdUri = friendsResource.getLastReadStateOfEntity();
Assert.assertNull(frdUri);
}
@Test
public void testCreateRepresentation() throws Exception {
ResourceTemplateImpl template = new ResourceTemplateImpl();
String temp = "Template";
template.setName("rep");
final byte[] bytes = temp.getBytes();
template.setTemplate(bytes);
template.setTemplateType(TemplateType.JAVASCRIPT.toString());
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
WorkspaceRepresentationsResource representationsResource = feedResource.getRepresentations();
WorkspaceRepresentationResource representationResource = representationsResource.createRepresentations(template);
Assert.assertEquals("rep", representationResource.get().getName());
Assert.assertEquals(temp, new String(representationResource.get().getTemplate()));
Assert.assertEquals(TemplateType.JAVASCRIPT.toString(), representationResource.get().getTemplateType());
}
@Test
public void testCreateVariation() throws Exception {
ResourceTemplateImpl template = new ResourceTemplateImpl();
String temp = "variationTemplate";
template.setName("variation");
final byte[] bytes = temp.getBytes();
template.setTemplate(bytes);
template.setTemplateType(TemplateType.VELOCITY.toString());
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
WorkspaceVariationsResource variationsResource = feedResource.getVariations();
WorkspaceVariationResource variationResource = variationsResource.createVariation(template);
Assert.assertEquals("variation", variationResource.get().getName());
Assert.assertEquals(temp, new String(variationResource.get().getTemplate()));
Assert.assertEquals(TemplateType.VELOCITY.toString(), variationResource.get().getTemplateType());
}
@Test
public void testUpdateRepresentation() throws Exception {
LOGGER.info(":::::::::::::: UPDATE REPRESENTATION RESOURCE TEST ::::::::::::::");
ResourceTemplateImpl template = new ResourceTemplateImpl();
String temp = "newTemplate";
final byte[] bytes = temp.getBytes();
template.setTemplate(bytes);
template.setTemplateType(TemplateType.RUBY.toString());
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
Collection<WorkspaceRepresentationResource> representationResources = feedResource.getRepresentations().
getRepresentationsResources();
Assert.assertEquals(1, representationResources.size());
Iterator<WorkspaceRepresentationResource> representationIterator = representationResources.iterator();
WorkspaceRepresentationResource representationResource = representationIterator.next();
representationResource.update(template);
Assert.assertEquals("rep", representationResource.get().getName());
Assert.assertEquals(temp, new String(representationResource.get().getTemplate()));
Assert.assertEquals(TemplateType.RUBY.toString(), representationResource.get().getTemplateType());
resource.getWorkspaceFeeds();
WorkspaceRepresentationResource secondRepresentationResource = resource.getWorkspaceFeeds().iterator().next().
getRepresentations().getRepresentationsResources().iterator().next();
template.setTemplateType(TemplateType.VELOCITY.name());
secondRepresentationResource.update(template);
Assert.assertEquals(TemplateType.VELOCITY.name(), secondRepresentationResource.get().getTemplateType());
try {
representationResource.update(template);
Assert.fail("Should not have been able to update!");
}
catch (UniformInterfaceException ex) {
//Exception expected
representationResource.get();
representationResource.update(template);
}
}
@Test
public void testUpdateVariation() throws Exception {
LOGGER.info(":::::::::::::: UPDATE VARIATION RESOURCE TEST ::::::::::::::");
ResourceTemplateImpl template = new ResourceTemplateImpl();
String temp = "newTemplate";
final byte[] bytes = temp.getBytes();
template.setTemplate(bytes);
template.setTemplateType(TemplateType.RUBY.toString());
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
Collection<WorkspaceVariationResource> variationResources = feedResource.getVariations().getVariationResources();
Assert.assertEquals(1, variationResources.size());
Iterator<WorkspaceVariationResource> VariationIterator = variationResources.iterator();
WorkspaceVariationResource variationResource = VariationIterator.next();
variationResource.update(template);
Assert.assertEquals("variation", variationResource.get().getName());
Assert.assertEquals(temp, new String(variationResource.get().getTemplate()));
Assert.assertEquals(TemplateType.RUBY.toString(), variationResource.get().getTemplateType());
resource.getWorkspaceFeeds();
WorkspaceVariationResource secondVariationResource = resource.getWorkspaceFeeds().iterator().next().
getVariations().getVariationResources().iterator().next();
template.setTemplateType(TemplateType.VELOCITY.name());
secondVariationResource.update(template);
Assert.assertEquals(TemplateType.VELOCITY.name(), secondVariationResource.get().getTemplateType());
try {
variationResource.update(template);
Assert.fail("Should not have been able to update!");
}
catch (UniformInterfaceException ex) {
//Exception expected
variationResource.get();
variationResource.update(template);
}
}
@Test
public void testDeleteRepresentation() throws Exception {
LOGGER.info(":::::::::::::: DELETE REPRESENTATION RESOURCE TEST ::::::::::::::");
ResourceTemplateImpl template = new ResourceTemplateImpl();
String temp = "Template2";
template.setName("rep2");
final byte[] bytes = temp.getBytes();
template.setTemplate(bytes);
template.setTemplateType(TemplateType.JAVASCRIPT.toString());
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
final WorkspaceRepresentationsResource representationsResource = feedResource.getRepresentations();
Collection<WorkspaceRepresentationResource> representationResources = representationsResource.
getRepresentationsResources();
Assert.assertEquals(1, representationResources.size());
representationsResource.createRepresentations(template);
Iterator<WorkspaceRepresentationResource> representationIterator = representationResources.iterator();
WorkspaceRepresentationResource representationResource = representationIterator.next();
representationResource.delete(ClientResponse.Status.ACCEPTED);
Collection<WorkspaceRepresentationResource> secondRepresentationResources = resource.getWorkspaceFeeds().iterator().
next().getRepresentations().getRepresentationsResources();
Assert.assertEquals(1, secondRepresentationResources.size());
}
@Test
public void testDeleteVariation() throws Exception {
LOGGER.info(":::::::::::::: DELETE VARIATION RESOURCE TEST ::::::::::::::");
ResourceTemplateImpl template = new ResourceTemplateImpl();
String temp = "Template2";
template.setName("aaavar2");
final byte[] bytes = temp.getBytes();
template.setTemplate(bytes);
template.setTemplateType(TemplateType.VELOCITY.name());
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
final WorkspaceVariationsResource variationsResource = feedResource.getVariations();
Collection<WorkspaceVariationResource> variationResources = variationsResource.getVariationResources();
Assert.assertEquals(1, variationResources.size());
variationsResource.createVariation(template);
variationsResource.get();
variationResources = variationsResource.getVariationResources();
Iterator<WorkspaceVariationResource> variationIterator = variationResources.iterator();
WorkspaceVariationResource variationResource = variationIterator.next();
variationResource.delete(ClientResponse.Status.ACCEPTED);
Collection<WorkspaceVariationResource> secondVariationResources = resource.getWorkspaceFeeds().iterator().
next().getVariations().getVariationResources();
Assert.assertEquals(1, secondVariationResources.size());
}
@Test
public void testCreateValidator() throws Exception {
ResourceTemplateImpl template = new ResourceTemplateImpl();
String temp = "validator";
template.setName("val");
final byte[] bytes = temp.getBytes();
template.setTemplate(bytes);
template.setTemplateType(TemplateType.JAVASCRIPT.toString());
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
WorkspaceValidatorsResource representationsResource = feedResource.getValidators();
WorkspaceValidatorResource validatorResource = representationsResource.createValidator(template);
Assert.assertEquals("val", validatorResource.get().getName());
Assert.assertEquals(temp, new String(validatorResource.get().getTemplate()));
Assert.assertEquals(ValidatorType.JAVASCRIPT.toString(), validatorResource.get().getTemplateType());
}
@Test
public void testUpdateValidator() throws Exception {
LOGGER.info(":::::::::::::: UPDATE VALIDATOR RESOURCE TEST ::::::::::::::");
ResourceTemplateImpl template = new ResourceTemplateImpl();
String temp = "newValidator";
final byte[] bytes = temp.getBytes();
template.setTemplate(bytes);
template.setTemplateType(ValidatorType.RUBY.toString());
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
Collection<WorkspaceValidatorResource> validatorResources = feedResource.getValidators().getValidatorResources();
Assert.assertEquals(1, validatorResources.size());
Iterator<WorkspaceValidatorResource> validatorIterator = validatorResources.iterator();
WorkspaceValidatorResource validatorRsrc = validatorIterator.next();
validatorRsrc.update(template);
Assert.assertEquals("val", validatorRsrc.get().getName());
Assert.assertEquals(temp, new String(validatorRsrc.get().getTemplate()));
Assert.assertEquals(ValidatorType.RUBY.toString(), validatorRsrc.get().getTemplateType());
resource.getWorkspaceFeeds();
WorkspaceValidatorResource secondValidatorResource = resource.getWorkspaceFeeds().iterator().next().
getValidators().getValidatorResources().iterator().next();
template.setTemplateType(ValidatorType.JAVASCRIPT.name());
secondValidatorResource.update(template);
Assert.assertEquals(ValidatorType.JAVASCRIPT.name(), secondValidatorResource.get().getTemplateType());
try {
validatorRsrc.update(template);
Assert.fail("Should not have been able to update!");
}
catch (UniformInterfaceException ex) {
//Exception expected
validatorRsrc.get();
validatorRsrc.update(template);
}
}
@Test
public void testDeleteValidator() throws Exception {
LOGGER.info(":::::::::::::: DELETE VALIDATOR RESOURCE TEST ::::::::::::::");
ResourceTemplateImpl template = new ResourceTemplateImpl();
String temp = "Template2";
template.setName("val2");
final byte[] bytes = temp.getBytes();
template.setTemplate(bytes);
template.setTemplateType(ValidatorType.GROOVY.name());
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
final WorkspaceValidatorsResource validatorsResource = feedResource.getValidators();
Collection<WorkspaceValidatorResource> validatorResources = validatorsResource.getValidatorResources();
Assert.assertEquals(1, validatorResources.size());
validatorsResource.createValidator(template);
validatorsResource.get();
validatorResources = validatorsResource.getValidatorResources();
Iterator<WorkspaceValidatorResource> validatorIterator = validatorResources.iterator();
WorkspaceValidatorResource validatorResource = validatorIterator.next();
validatorResource.delete(ClientResponse.Status.ACCEPTED);
Collection<WorkspaceValidatorResource> secondValidatorResources = resource.getWorkspaceFeeds().iterator().
next().getValidators().getValidatorResources();
Assert.assertEquals(1, secondValidatorResources.size());
}
@Test
public void testCreateContentType() throws Exception {
LOGGER.info(":::::::::::::: CREATE CONTENT_TYPE RESOURCE TEST ::::::::::::::");
WorkspaceId workspaceId = SmartContentAPI.getInstance().getWorkspaceApi().createWorkspaceId("atest2", "additional");
String XML = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("content-type-def-shopping.xml"));
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
ContentTypesResource contentTypesResource = feedResource.getContentTypes();
contentTypesResource.get();
Collection<ContentTypeResource> collection1 = contentTypesResource.getContentTypes();
Assert.assertEquals(0, collection1.size());
contentTypesResource.createContentType(XML);
contentTypesResource.get();
Collection<ContentTypeResource> collection = contentTypesResource.getContentTypes();
Assert.assertEquals(3, collection.size());
Collection<ContentTypeFeedResource> feedCollection = contentTypesResource.getContentTypeFeeds();
Assert.assertEquals(3, feedCollection.size());
for (ContentTypeFeedResource res : feedCollection) {
Assert.assertTrue(res.getFieldDefs().size() > 0);
}
InputStream inputStream = IOUtils.toInputStream(XML);
String NAME_SPACE = "com.smartitengineering.smart-shopping.content";
Collection<WritableContentType> contentTypes = SmartContentAPI.getInstance().getContentTypeLoader().
parseContentTypes(workspaceId, inputStream, com.smartitengineering.cms.api.common.MediaType.APPLICATION_XML);
String[] name = {"Book", "Publisher", "Author"};
Collection<ContentType> HBaseContentTypes = new ArrayList<ContentType>();
for (int i = 0; i < 3; i++) {
ContentTypeId contentTypeId = SmartContentAPI.getInstance().getContentTypeLoader().createContentTypeId(
workspaceId,
NAME_SPACE,
name[i]);
ContentType contentTypeTest =
SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(contentTypeId);
HBaseContentTypes.add(contentTypeTest);
}
Assert.assertEquals(contentTypes.size(), HBaseContentTypes.size());
Iterator<WritableContentType> iterator1 = contentTypes.iterator();
Iterator<ContentType> iterator2 = HBaseContentTypes.iterator();
for (int i = 0; i < 3; i++) {
ContentType servedContentType = iterator1.next();
ContentType getContentType = iterator2.next();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Type Name : " + getContentType.getContentTypeID().getName());
}
Assert.assertEquals(servedContentType.getContentTypeID().getName(), getContentType.getContentTypeID().getName());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Type Namespace : " + getContentType.getContentTypeID().getNamespace());
}
Assert.assertEquals(servedContentType.getContentTypeID().getNamespace(), getContentType.getContentTypeID().
getNamespace());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Type Global Namespace : " + getContentType.getContentTypeID().getWorkspace().
getGlobalNamespace());
}
Assert.assertEquals(servedContentType.getContentTypeID().getWorkspace().getGlobalNamespace(), getContentType.
getContentTypeID().getWorkspace().getGlobalNamespace());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Type ID Global Name : " + getContentType.getContentTypeID().getWorkspace().getName());
}
Assert.assertEquals(servedContentType.getContentTypeID().getWorkspace().getName(),
getContentType.getContentTypeID().
getWorkspace().getName());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Type Display Name : " + getContentType.getDisplayName());
}
Assert.assertEquals(servedContentType.getDisplayName(), getContentType.getDisplayName());
if (getContentType.getParent() != null) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Type Parent's Name : " + getContentType.getParent().getName());
}
Assert.assertEquals(servedContentType.getParent().getName(), getContentType.getParent().getName());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Type Parent's Namespace : " + getContentType.getParent().getNamespace());
}
Assert.assertEquals(servedContentType.getParent().getNamespace(), getContentType.getParent().getNamespace());
Assert.assertEquals(servedContentType.getParent().getWorkspace().getGlobalNamespace(),
getContentType.getParent().
getWorkspace().getGlobalNamespace());
Assert.assertEquals(servedContentType.getParent().getWorkspace().getName(), getContentType.getParent().
getWorkspace().getName());
}
Assert.assertEquals(servedContentType.getStatuses().size(), getContentType.getStatuses().size());
Set statusKeys = servedContentType.getStatuses().keySet();
for (Iterator ite = statusKeys.iterator(); ite.hasNext();) {
String key = (String) ite.next();
ContentStatus servedContentStatus = servedContentType.getStatuses().get(key);
ContentStatus getContentStatus = getContentType.getStatuses().get(key);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Status : " + getContentStatus.getName());
}
Assert.assertEquals(servedContentStatus.getName(), getContentStatus.getName());
}
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Size of Representations Defs : " + getContentType.getRepresentationDefs());
}
Assert.assertEquals(servedContentType.getRepresentations().size(), getContentType.getRepresentations().size());
Assert.assertEquals(servedContentType.getRepresentationDefs().size(),
getContentType.getRepresentationDefs().size());
Map<String, RepresentationDef> servedRepresentationDefs = servedContentType.getRepresentationDefs();
Set keys = servedRepresentationDefs.keySet();
for (Iterator ite = keys.iterator(); ite.hasNext();) {
String key = (String) ite.next();
RepresentationDef servedRepresentationDef = servedContentType.getRepresentationDefs().get(key);
RepresentationDef getRepresentationDef = getContentType.getRepresentationDefs().get(key);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Representation MimeType : " + getRepresentationDef.getMIMEType());
}
Assert.assertEquals(servedRepresentationDef.getMIMEType(), getRepresentationDef.getMIMEType());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Representation Name : " + getRepresentationDef.getName());
}
Assert.assertEquals(servedRepresentationDef.getName(), getRepresentationDef.getName());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Representation URI : " + getRepresentationDef.getResourceUri().getValue());
}
Assert.assertEquals(servedRepresentationDef.getResourceUri().getValue(), getRepresentationDef.getResourceUri().
getValue());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Representation URI Type : " + getRepresentationDef.getResourceUri().getType().name());
}
Assert.assertEquals(servedRepresentationDef.getResourceUri().getType().name(), getRepresentationDef.
getResourceUri().getType().name());
}
Assert.assertEquals(servedContentType.getFieldDefs().size(), getContentType.getFieldDefs().size());
Map<String, FieldDef> servedFieldDefs = servedContentType.getFieldDefs();
Set fieldKeys = servedFieldDefs.keySet();
for (Iterator ite = fieldKeys.iterator(); ite.hasNext();) {
String key = (String) ite.next();
FieldDef servedFieldDef = servedContentType.getFieldDefs().get(key);
FieldDef getFieldDef = getContentType.getFieldDefs().get(key);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Field Name : " + getFieldDef.getName());
}
Assert.assertEquals(servedFieldDef.getName(), getFieldDef.getName());
if (servedFieldDef.getCustomValidators() != null && !servedFieldDef.getCustomValidators().isEmpty()) {
if (servedFieldDef.getCustomValidators().iterator().next().getUri() != null) {
Assert.assertEquals(servedFieldDef.getCustomValidators().iterator().next().getUri().getType().name(),
getFieldDef.getCustomValidators().iterator().next().getUri().getType().name());
Assert.assertEquals(servedFieldDef.getCustomValidators().iterator().next().getUri().getValue(), getFieldDef.
getCustomValidators().iterator().next().getUri().getValue());
}
}
if (getFieldDef.getSearchDefinition() != null) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Field Search Def : " + getFieldDef.getSearchDefinition().toString());
}
Assert.assertEquals(getFieldDef.getSearchDefinition().toString(), getFieldDef.getSearchDefinition().toString());
}
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Field value Name : " + getFieldDef.getValueDef().getType().name());
}
Assert.assertEquals(servedFieldDef.getValueDef().getType().name(), getFieldDef.getValueDef().getType().name());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Field isUpdateable : " + getFieldDef.isFieldStandaloneUpdateAble());
}
Assert.assertEquals(servedFieldDef.isFieldStandaloneUpdateAble(), getFieldDef.isFieldStandaloneUpdateAble());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Field isRequired : " + getFieldDef.isRequired());
}
Assert.assertEquals(servedFieldDef.isRequired(), getFieldDef.isRequired());
Collection<VariationDef> servedVariationDefs = servedFieldDef.getVariations().values();
Collection<VariationDef> getVariationDefs = getFieldDef.getVariations().values();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Size of Variation Def : " + getFieldDef.getVariations().size());
}
Assert.assertEquals(servedVariationDefs.size(), getVariationDefs.size());
Iterator<VariationDef> iterator3 = getVariationDefs.iterator();
for (VariationDef servedVariationDef : servedVariationDefs) {
VariationDef getVariationDef = iterator3.next();
Assert.assertEquals(servedVariationDef.getMIMEType(), getVariationDef.getMIMEType());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Variation Name : " + getVariationDef.getName());
}
Assert.assertEquals(servedVariationDef.getName(), getVariationDef.getName());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Variation URI Type : " + getVariationDef.getResourceUri().getType().name());
}
Assert.assertEquals(servedVariationDef.getResourceUri().getType().name(), getVariationDef.getResourceUri().
getType().name());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Variation URI : " + getVariationDef.getResourceUri().getValue());
}
Assert.assertEquals(servedVariationDef.getResourceUri().getValue(),
getVariationDef.getResourceUri().getValue());
}
}
}
}
@Test
public void testCreateContentTypeWithInvalidXML() throws Exception {
LOGGER.info(":::::::::::::: CREATE CONTENT_TYPE RESOURCE WITH INVALID XML TEST ::::::::::::::");
String XML = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("InvalidValueType.xml"));
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
ContentTypesResource contentTypesResource = feedResource.getContentTypes();
contentTypesResource.get();
try {
contentTypesResource.createContentType(XML);
Assert.fail("Should not be able to create!");
}
catch (UniformInterfaceException ex) {
Assert.assertEquals(400, ex.getResponse().getStatus());
}
}
@Test
public void testUpdateContentType() throws Exception {
LOGGER.info(":::::::::::::: UPDATE CONTENT_TYPE RESOURCE TEST ::::::::::::::");
WorkspaceId workspaceId = SmartContentAPI.getInstance().getWorkspaceApi().createWorkspaceId("atest2", "additional");
String XML = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("Update-shopping.xml"));
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
ContentTypesResource contentTypesResource = feedResource.getContentTypes();
contentTypesResource.get();
Collection<ContentTypeResource> collection1 = contentTypesResource.getContentTypes();
Assert.assertEquals(3, collection1.size());
contentTypesResource.createContentType(XML);
contentTypesResource.get();
Collection<ContentTypeResource> collection = contentTypesResource.getContentTypes();
Assert.assertEquals(4, collection.size());
InputStream inputStream = IOUtils.toInputStream(XML);
String NAME_SPACE = "com.smartitengineering.smart-shopping.content";
Collection<WritableContentType> contentTypes = SmartContentAPI.getInstance().getContentTypeLoader().
parseContentTypes(workspaceId, inputStream, com.smartitengineering.cms.api.common.MediaType.APPLICATION_XML);
String[] name = {"Book", "Publisher", "Author", "Address"};
Collection<ContentType> HBaseContentTypes = new ArrayList<ContentType>();
for (int i = 0; i < 4; i++) {
ContentTypeId contentTypeId = SmartContentAPI.getInstance().getContentTypeLoader().createContentTypeId(
workspaceId,
NAME_SPACE,
name[i]);
ContentType contentTypeTest =
SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(contentTypeId);
HBaseContentTypes.add(contentTypeTest);
}
Assert.assertEquals(contentTypes.size(), HBaseContentTypes.size());
Iterator<WritableContentType> iterator1 = contentTypes.iterator();
Iterator<ContentType> iterator2 = HBaseContentTypes.iterator();
for (int i = 0; i < 3; i++) {
ContentType servedContentType = iterator1.next();
ContentType getContentType = iterator2.next();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Type Name : " + getContentType.getContentTypeID().getName());
}
Assert.assertEquals(servedContentType.getContentTypeID().getName(), getContentType.getContentTypeID().getName());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Type Namespace : " + getContentType.getContentTypeID().getNamespace());
}
Assert.assertEquals(servedContentType.getContentTypeID().getNamespace(), getContentType.getContentTypeID().
getNamespace());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Type Global Namespace : " + getContentType.getContentTypeID().getWorkspace().
getGlobalNamespace());
}
Assert.assertEquals(servedContentType.getContentTypeID().getWorkspace().getGlobalNamespace(), getContentType.
getContentTypeID().getWorkspace().getGlobalNamespace());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Type ID Global Name : " + getContentType.getContentTypeID().getWorkspace().getName());
}
Assert.assertEquals(servedContentType.getContentTypeID().getWorkspace().getName(),
getContentType.getContentTypeID().
getWorkspace().getName());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Type Display Name : " + getContentType.getDisplayName());
}
Assert.assertEquals(servedContentType.getDisplayName(), getContentType.getDisplayName());
if (getContentType.getParent() != null) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Type Parent's Name : " + getContentType.getParent().getName());
}
Assert.assertEquals(servedContentType.getParent().getName(), getContentType.getParent().getName());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Type Parent's Namespace : " + getContentType.getParent().getNamespace());
}
Assert.assertEquals(servedContentType.getParent().getNamespace(), getContentType.getParent().getNamespace());
Assert.assertEquals(servedContentType.getParent().getWorkspace().getGlobalNamespace(),
getContentType.getParent().
getWorkspace().getGlobalNamespace());
Assert.assertEquals(servedContentType.getParent().getWorkspace().getName(), getContentType.getParent().
getWorkspace().getName());
}
Assert.assertEquals(servedContentType.getStatuses().size(), getContentType.getStatuses().size());
Set statusKeys = servedContentType.getStatuses().keySet();
for (Iterator ite = statusKeys.iterator(); ite.hasNext();) {
String key = (String) ite.next();
ContentStatus servedContentStatus = servedContentType.getStatuses().get(key);
ContentStatus getContentStatus = getContentType.getStatuses().get(key);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Content Status : " + getContentStatus.getName());
}
Assert.assertEquals(servedContentStatus.getName(), getContentStatus.getName());
}
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Size of Representations Defs : " + getContentType.getRepresentationDefs());
}
Assert.assertEquals(servedContentType.getRepresentations().size(), getContentType.getRepresentations().size());
Assert.assertEquals(servedContentType.getRepresentationDefs().size(),
getContentType.getRepresentationDefs().size());
Map<String, RepresentationDef> servedRepresentationDefs = servedContentType.getRepresentationDefs();
Set keys = servedRepresentationDefs.keySet();
for (Iterator ite = keys.iterator(); ite.hasNext();) {
String key = (String) ite.next();
RepresentationDef servedRepresentationDef = servedContentType.getRepresentationDefs().get(key);
RepresentationDef getRepresentationDef = getContentType.getRepresentationDefs().get(key);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Representation MimeType : " + getRepresentationDef.getMIMEType());
}
Assert.assertEquals(servedRepresentationDef.getMIMEType(), getRepresentationDef.getMIMEType());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Representation Name : " + getRepresentationDef.getName());
}
Assert.assertEquals(servedRepresentationDef.getName(), getRepresentationDef.getName());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Representation URI : " + getRepresentationDef.getResourceUri().getValue());
}
Assert.assertEquals(servedRepresentationDef.getResourceUri().getValue(), getRepresentationDef.getResourceUri().
getValue());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Representation URI Type : " + getRepresentationDef.getResourceUri().getType().name());
}
Assert.assertEquals(servedRepresentationDef.getResourceUri().getType().name(), getRepresentationDef.
getResourceUri().getType().name());
}
Assert.assertEquals(servedContentType.getFieldDefs().size(), getContentType.getFieldDefs().size());
Map<String, FieldDef> servedFieldDefs = servedContentType.getFieldDefs();
Set fieldKeys = servedFieldDefs.keySet();
for (Iterator ite = fieldKeys.iterator(); ite.hasNext();) {
String key = (String) ite.next();
FieldDef servedFieldDef = servedContentType.getFieldDefs().get(key);
FieldDef getFieldDef = getContentType.getFieldDefs().get(key);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Field Name : " + getFieldDef.getName());
}
Assert.assertEquals(servedFieldDef.getName(), getFieldDef.getName());
if (servedFieldDef.getCustomValidators() != null && !servedFieldDef.getCustomValidators().isEmpty()) {
if (servedFieldDef.getCustomValidators().iterator().next().getUri() != null) {
Assert.assertEquals(servedFieldDef.getCustomValidators().iterator().next().getUri().getType().name(),
getFieldDef.getCustomValidators().iterator().next().getUri().getType().name());
Assert.assertEquals(servedFieldDef.getCustomValidators().iterator().next().getUri().getValue(), getFieldDef.
getCustomValidators().iterator().next().getUri().getValue());
}
}
if (getFieldDef.getSearchDefinition() != null) {
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Field Search Def : " + getFieldDef.getSearchDefinition().toString());
}
Assert.assertEquals(getFieldDef.getSearchDefinition().toString(), getFieldDef.getSearchDefinition().toString());
}
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Field value Name : " + getFieldDef.getValueDef().getType().name());
}
Assert.assertEquals(servedFieldDef.getValueDef().getType().name(), getFieldDef.getValueDef().getType().name());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Field isUpdateable : " + getFieldDef.isFieldStandaloneUpdateAble());
}
Assert.assertEquals(servedFieldDef.isFieldStandaloneUpdateAble(), getFieldDef.isFieldStandaloneUpdateAble());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Field isRequired : " + getFieldDef.isRequired());
}
Assert.assertEquals(servedFieldDef.isRequired(), getFieldDef.isRequired());
Collection<VariationDef> servedVariationDefs = servedFieldDef.getVariations().values();
Collection<VariationDef> getVariationDefs = getFieldDef.getVariations().values();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Size of Variation Def : " + getFieldDef.getVariations().size());
}
Assert.assertEquals(servedVariationDefs.size(), getVariationDefs.size());
Iterator<VariationDef> iterator3 = getVariationDefs.iterator();
for (VariationDef servedVariationDef : servedVariationDefs) {
VariationDef getVariationDef = iterator3.next();
Assert.assertEquals(servedVariationDef.getMIMEType(), getVariationDef.getMIMEType());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Variation Name : " + getVariationDef.getName());
}
Assert.assertEquals(servedVariationDef.getName(), getVariationDef.getName());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Variation URI Type : " + getVariationDef.getResourceUri().getType().name());
}
Assert.assertEquals(servedVariationDef.getResourceUri().getType().name(), getVariationDef.getResourceUri().
getType().name());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Variation URI : " + getVariationDef.getResourceUri().getValue());
}
Assert.assertEquals(servedVariationDef.getResourceUri().getValue(),
getVariationDef.getResourceUri().getValue());
}
}
}
}
@Test
public void testCreateInvlidContent() throws Exception {
LOGGER.info(":::::::::::::: CREATE INVALID CONTENT RESOURCE TEST ::::::::::::::");
ObjectMapper mapper = new ObjectMapper();
String JSON = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("InvalidContent.json"));
InputStream stream = IOUtils.toInputStream(JSON);
Content content = mapper.readValue(stream, Content.class);
Assert.assertNotNull(content);
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
try {
feedResource.getContents().createContentResource(content);
Assert.fail("Should not be able to create!");
}
catch (UniformInterfaceException ex) {
Assert.assertEquals(400, ex.getResponse().getStatus());
}
}
@Test
public void testCreateContent() throws Exception {
LOGGER.info(":::::::::::::: CREATE DUMMY CONTENT RESOURCE TEST ::::::::::::::");
ObjectMapper mapper1 = new ObjectMapper();
String JSON1 = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("DummyContent.json"));
InputStream stream1 = IOUtils.toInputStream(JSON1);
Content contentTest = mapper1.readValue(stream1, Content.class);
Assert.assertNotNull(contentTest);
RootResource resource1 = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources1 = resource1.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iteratorTest = workspaceFeedResources1.iterator();
WorkspaceFeedResource feedResourceTest = iteratorTest.next();
ContentResource contentResourceTest = feedResourceTest.getContents().createContentResource(contentTest);
FieldValueImpl value = new FieldValueImpl();
value.setType(
"content");
value.setValue(contentResourceTest.getUri().toASCIIString());
FieldImpl authorField = new FieldImpl();
authorField.setName(
"Authors");
authorField.setValue(value);
String valueString = "otherValue";
byte[] otherValue = valueString.getBytes();
OtherFieldValueImpl otherFieldValueImpl = new OtherFieldValueImpl();
otherFieldValueImpl.setMimeType(
"jpeg/image");
otherFieldValueImpl.setType(
"other");
otherFieldValueImpl.setValue(Base64.encodeBase64String(otherValue));
FieldImpl valueImpl = new FieldImpl();
valueImpl.setName(
"b");
valueImpl.setValue(otherFieldValueImpl);
sleep();
sleep();
LOGGER.info(
":::::::::::::: CREATE CONTENT RESOURCE TEST ::::::::::::::");
ObjectMapper mapper = new ObjectMapper();
String JSON = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("Content.json"));
InputStream stream = IOUtils.toInputStream(JSON);
Content content = mapper.readValue(stream, Content.class);
content.getFields().add(valueImpl);
content.getFields().add(authorField);
Assert.assertNotNull(content);
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
ContentResource contentResource = feedResource.getContents().createContentResource(content);
Content content1 = contentResource.get();
Assert.assertNotNull(content1);
Assert.assertEquals(content.getParentContentUri(), content1.getParentContentUri());
Assert.assertEquals(content.getStatus(), content1.getStatus());
Assert.assertEquals(content.getFields().size(), content1.getFields().size());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Parent Container Uri : " + content1.getParentContentUri());
LOGGER.debug("Status : " + content1.getStatus());
LOGGER.debug("Number of Fields : " + content1.getFields().size());
}
Collection<Field> fields = content.getFields();
Collections.reverse(
(List<Field>) fields);
Iterator<Field> iterator1 = fields.iterator();
Field field = iterator1.next();
final Iterator<Field> iterator2 = content1.getFields().iterator();
Field field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertNotNull(field1.getFieldRawContentUri());
Assert.assertNotNull(field1.getFieldUri());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertTrue(field.getValue().getValue().endsWith(field1.getValue().getValue()));
field = iterator1.next();
field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field1.getValue().getValue());
field = iterator1.next();
field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field1.getValue().getValue());
CollectionFieldValue collectionFieldValue = (CollectionFieldValue) field.getValue();
CollectionFieldValue collectionFieldValue1 = (CollectionFieldValue) field1.getValue();
Assert.assertEquals(collectionFieldValue.getType().toUpperCase(), collectionFieldValue1.getType());
Assert.assertEquals(collectionFieldValue.getValues().size(), collectionFieldValue1.getValues().size());
Iterator<FieldValue> collectionIterator1 = collectionFieldValue.getValues().iterator();
Iterator<FieldValue> collectionIterator2 = collectionFieldValue1.getValues().iterator();
while (collectionIterator1.hasNext()) {
String value1 = collectionIterator1.next().getValue();
String value2 = collectionIterator2.next().getValue();
Assert.assertEquals(value1, value2);
}
field = iterator1.next();
field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field1.getValue().getValue());
field = iterator1.next();
field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field1.getValue().getValue());
field = iterator1.next();
field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field1.getValue().getValue());
field = iterator1.next();
field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field1.getValue().getValue());
field = iterator1.next();
field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field1.getValue().getValue());
sleep();
}
@Test
public void testUriTemplates() throws URISyntaxException {
LOGGER.info("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% TEST TEMPLATES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
final String workspaceNS, workspaceId, typeNS, typeId;
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
WorkspaceFeedResource feedResource = resource.getWorkspaceFeeds().iterator().next();
workspaceNS = "atest2";
workspaceId = "additional";
typeNS = "com.smartitengineering.smart-shopping.content";
typeId = "Publisher";
UriTemplateResource templateResource = resource.getTemplates();
LOGGER.info("Testing getting workspace");
Assert.assertNotNull(templateResource.getWorkspaceResource(workspaceNS, workspaceId));
LOGGER.info("Testing getting content type");
Assert.assertNotNull(templateResource.getContentTypeResource(workspaceNS, workspaceId, typeNS, typeId));
LOGGER.info("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% END TEST TEMPLATES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
}
@Test
public void testContentListener() throws Exception {
final MutableInt createCount = new MutableInt(0);
final MutableInt updateCount = new MutableInt(0);
final MutableInt deleteCount = new MutableInt(0);
SmartContentAPI.getInstance().getEventRegistrar().addListener(new EventListener() {
@Override
public boolean accepts(Event event) {
return event.getEventSourceType().equals(Event.Type.CONTENT) && event.getEventType().equals(EventType.CREATE);
}
@Override
public void notify(Event event) {
createCount.add(1);
}
});
SmartContentAPI.getInstance().getEventRegistrar().addListener(new EventListener() {
@Override
public boolean accepts(Event event) {
return event.getEventSourceType().equals(Event.Type.CONTENT) && event.getEventType().equals(EventType.UPDATE);
}
@Override
public void notify(Event event) {
updateCount.add(1);
}
});
SmartContentAPI.getInstance().getEventRegistrar().addListener(new EventListener() {
@Override
public boolean accepts(Event event) {
return event.getEventSourceType().equals(Event.Type.CONTENT) && event.getEventType().equals(EventType.DELETE);
}
@Override
public void notify(Event event) {
deleteCount.add(1);
}
});
ObjectMapper mapper1 = new ObjectMapper();
String JSON1 = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("DummyContent.json"));
InputStream stream1 = IOUtils.toInputStream(JSON1);
Content contentTest = mapper1.readValue(stream1, Content.class);
Assert.assertNotNull(contentTest);
RootResource resource1 = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources1 = resource1.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iteratorTest = workspaceFeedResources1.iterator();
WorkspaceFeedResource feedResourceTest = iteratorTest.next();
ContentResource authorResource = feedResourceTest.getContents().createContentResource(contentTest);
FieldValueImpl value = new FieldValueImpl();
value.setType(
"content");
value.setValue(authorResource.getUri().toASCIIString());
FieldImpl authorField = new FieldImpl();
authorField.setName(
"Authors");
authorField.setValue(value);
String valueString = "otherValue";
byte[] otherValue = valueString.getBytes();
OtherFieldValueImpl otherFieldValueImpl = new OtherFieldValueImpl();
otherFieldValueImpl.setMimeType(
"jpeg/image");
otherFieldValueImpl.setType(
"other");
otherFieldValueImpl.setValue(Base64.encodeBase64String(otherValue));
FieldImpl valueImpl = new FieldImpl();
valueImpl.setName(
"b");
valueImpl.setValue(otherFieldValueImpl);
ObjectMapper mapper = new ObjectMapper();
String JSON = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("Content.json"));
InputStream stream = IOUtils.toInputStream(JSON);
Content content = mapper.readValue(stream, Content.class);
content.getFields().add(valueImpl);
content.getFields().add(authorField);
Assert.assertNotNull(content);
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
sleep();
ContentResource contentResource = feedResource.getContents().createContentResource(content);
Assert.assertEquals(
2, createCount.intValue());
contentResource.update(content);
Assert.assertEquals(
1, updateCount.intValue());
authorResource.delete();
contentResource.get();
contentResource.delete();
Assert.assertEquals(
2, deleteCount.intValue());
sleep();
}
@Test
public void testAddContainerContent() throws Exception {
LOGGER.info(":::::::::::::: CREATE CONTENT IN CONTAINER RESOURCE TEST ::::::::::::::");
ObjectMapper mapper1 = new ObjectMapper();
String JSON1 = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("DummyContent.json"));
InputStream stream1 = IOUtils.toInputStream(JSON1);
Content contentTest = mapper1.readValue(stream1, Content.class);
Assert.assertNotNull(contentTest);
RootResource resource1 = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources1 = resource1.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iteratorTest = workspaceFeedResources1.iterator();
WorkspaceFeedResource feedResourceTest = iteratorTest.next();
ContentResource contentResourceTest = feedResourceTest.getContents().createContentResource(contentTest);
sleep();
FieldValueImpl value = new FieldValueImpl();
value.setType(
"content");
value.setValue(contentResourceTest.getUri().toASCIIString());
FieldImpl authorField = new FieldImpl();
authorField.setName(
"Authors");
authorField.setValue(value);
String valueString = "otherValue";
byte[] otherValue = valueString.getBytes();
OtherFieldValueImpl otherFieldValueImpl = new OtherFieldValueImpl();
otherFieldValueImpl.setMimeType(
"jpeg/image");
otherFieldValueImpl.setType(
"other");
otherFieldValueImpl.setValue(Base64.encodeBase64String(otherValue));
FieldImpl valueImpl = new FieldImpl();
valueImpl.setName(
"b");
valueImpl.setValue(otherFieldValueImpl);
ObjectMapper mapper = new ObjectMapper();
String JSON = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("Update-Content.json"));
InputStream stream = IOUtils.toInputStream(JSON);
Content content = mapper.readValue(stream, Content.class);
content.getFields().add(valueImpl);
content.getFields().add(authorField);
Assert.assertNotNull(content);
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
ContentResource contentResource = feedResource.getContents().createContentResource(content);
Content content1 = contentResource.get();
Assert.assertNotNull(content1);
Assert.assertEquals(content.getParentContentUri(), content1.getParentContentUri());
Assert.assertEquals(content.getStatus(), content1.getStatus());
Assert.assertEquals(content.getFields().size(), content1.getFields().size());
Collection<Field> fields = content.getFields();
Collections.reverse(
(List<Field>) fields);
final Field field = fields.iterator().next();
final Field field1 = content1.getFields().iterator().next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType(), field.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field.getValue().getValue());
feedResource.get();
ContainerResource containerResource = feedResource.getContents().getContainer().iterator().next();
containerResource.createContainer(contentResource.getUri());
Assert.assertEquals(
1, containerResource.getContainerContents().size());
Assert.assertEquals(contentResource.getUri().toASCIIString(), containerResource.getContainerContents().iterator().
next().getUri().toASCIIString());
}
@Test
public void testCreateContentWithInvalidWorkspace() throws Exception {
LOGGER.info(":::::::::::::: CREATE CONTENT WITH INVALID WORKSPACE ::::::::::::::");
WorkspaceId workspaceId = SmartContentAPI.getInstance().getWorkspaceApi().createWorkspaceId("atest2", "additional");
WorkspaceId invalidWorkspaceId = SmartContentAPI.getInstance().getWorkspaceApi().createWorkspaceId("invalidws",
"invalidws");
String nameSpace = "com.smartitengineering.smart-shopping.content";
String name = "Publisher";
ContentTypeId contentTypeId = SmartContentAPI.getInstance().getContentTypeLoader().createContentTypeId(workspaceId,
nameSpace,
name);
ContentType contentType = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(contentTypeId);
String statusKey = contentType.getStatuses().keySet().iterator().next();
ContentStatus contentStatus = contentType.getStatuses().get(statusKey);
final WriteableContent writeableContent;
MutableContent mutableContent = SmartContentAPI.getInstance().getContentLoader().createContent(contentType);
mutableContent.setContentDefinition(contentType);
mutableContent.setPrivate(false);
mutableContent.setStatus(contentStatus);
MutableField mutableField = new com.smartitengineering.cms.api.impl.content.FieldImpl();
mutableField.setName("name");
MutableFieldValue<String> mutableFieldValue =
new com.smartitengineering.cms.api.impl.content.FieldValueImpl<String>();
mutableFieldValue.setValue("russel");
mutableField.setValue(mutableFieldValue);
mutableContent.setField(mutableField);
//Create new content
writeableContent = SmartContentAPI.getInstance().getContentLoader().getWritableContent(mutableContent);
writeableContent.createContentId(invalidWorkspaceId);
try {
//Save or update the content, will be decided by writeable content implementation
writeableContent.put();
Assert.fail();
}
catch (IOException ex) {
LOGGER.info("Should fail", ex);
}
}
@Test
public void testUpdateCointainerContent() throws Exception {
LOGGER.info(":::::::::::::: UPDATE CONTAINER CONTENT RESOURCE TEST ::::::::::::::");
ObjectMapper mapper1 = new ObjectMapper();
String JSON1 = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("DummyContent.json"));
InputStream stream1 = IOUtils.toInputStream(JSON1);
Content contentTest = mapper1.readValue(stream1, Content.class);
Assert.assertNotNull(contentTest);
RootResource resource1 = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources1 = resource1.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iteratorTest = workspaceFeedResources1.iterator();
WorkspaceFeedResource feedResourceTest = iteratorTest.next();
ContentResource contentResourceTest = feedResourceTest.getContents().createContentResource(contentTest);
sleep();
FieldValueImpl value = new FieldValueImpl();
value.setType(
"content");
value.setValue(contentResourceTest.getUri().toASCIIString());
FieldImpl authorField = new FieldImpl();
authorField.setName(
"Authors");
authorField.setValue(value);
String valueString = "otherValue";
byte[] otherValue = valueString.getBytes();
OtherFieldValueImpl otherFieldValueImpl = new OtherFieldValueImpl();
otherFieldValueImpl.setMimeType(
"jpeg/image");
otherFieldValueImpl.setType(
"other");
otherFieldValueImpl.setValue(Base64.encodeBase64String(otherValue));
FieldImpl valueImpl = new FieldImpl();
valueImpl.setName(
"b");
valueImpl.setValue(otherFieldValueImpl);
Collection<URI> contentUri = new ArrayList<URI>();
ObjectMapper mapper = new ObjectMapper();
String JSON = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("Content.json"));
InputStream stream = IOUtils.toInputStream(JSON);
Content content = mapper.readValue(stream, Content.class);
content.getFields().add(valueImpl);
content.getFields().add(authorField);
Assert.assertNotNull(content);
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
ContentResource contentResource = feedResource.getContents().createContentResource(content);
feedResource.get();
ContainerResource containerResource = feedResource.getContents().getContainer().iterator().next();
contentUri.add(contentResource.getUri());
containerResource.updateContainer(contentUri);
Assert.assertEquals(
1, containerResource.getContainerContents().size());
Assert.assertEquals(contentResource.getUri().toASCIIString(), containerResource.getContainerContents().iterator().
next().getUri().toASCIIString());
}
@Test
public void testDeleteContainerContent() throws Exception {
LOGGER.info(":::::::::::::: UPDATE CONTAINER CONTENT RESOURCE TEST ::::::::::::::");
RootResource rootResource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = rootResource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
feedResource.get();
ContainerResource containerResource = feedResource.getContents().getContainer().iterator().next();
containerResource.delete(ClientResponse.Status.ACCEPTED);
Assert.assertEquals(0, containerResource.getContainerContents().size());
}
@Test
public void testUpdateContent() throws Exception {
LOGGER.info(":::::::::::::: UPDATE CONTENT RESOURCE TEST ::::::::::::::");
ObjectMapper mapper1 = new ObjectMapper();
String JSON1 = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("DummyContent.json"));
InputStream stream1 = IOUtils.toInputStream(JSON1);
Content contentTest = mapper1.readValue(stream1, Content.class);
Assert.assertNotNull(contentTest);
RootResource resource1 = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources1 = resource1.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iteratorTest = workspaceFeedResources1.iterator();
WorkspaceFeedResource feedResourceTest = iteratorTest.next();
ContentResource contentResourceTest = feedResourceTest.getContents().createContentResource(contentTest);
sleep();
FieldValueImpl value = new FieldValueImpl();
value.setType(
"content");
value.setValue(contentResourceTest.getUri().toASCIIString());
FieldImpl authorField = new FieldImpl();
authorField.setName(
"Authors");
authorField.setValue(value);
String valueString = "otherValue";
byte[] otherValue = valueString.getBytes();
OtherFieldValueImpl otherFieldValueImpl = new OtherFieldValueImpl();
otherFieldValueImpl.setMimeType(
"jpeg/image");
otherFieldValueImpl.setType(
"other");
otherFieldValueImpl.setValue(Base64.encodeBase64String(otherValue));
FieldImpl valueImpl = new FieldImpl();
valueImpl.setName(
"b");
valueImpl.setValue(otherFieldValueImpl);
ObjectMapper mapper = new ObjectMapper();
String JSON = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("Content.json"));
InputStream stream = IOUtils.toInputStream(JSON);
Content content = mapper.readValue(stream, Content.class);
content.getFields().add(valueImpl);
content.getFields().add(authorField);
Assert.assertNotNull(content);
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
ContentResource contentResource = feedResource.getContents().createContentResource(content);
Content content1 = contentResource.get();
Assert.assertNotNull(content1);
Assert.assertEquals(content.getParentContentUri(), content1.getParentContentUri());
Assert.assertEquals(content.getStatus(), content1.getStatus());
Assert.assertEquals(content.getFields().size(), content1.getFields().size());
LOGGER.info(
"::: TEST SEARCHING FROM WORKSPACE RESOURCE");
ContentSearcherResource contentSearcherResource = feedResource.searchContent("count=3");
Assert.assertEquals(
3, contentSearcherResource.get().getEntries().size());
LOGGER.info(
"::: TEST SEARCHING FROM CONTENT RESOURCE");
ContentsResource contentsResource = feedResource.getContents();
ContentSearcherResource contentSearcherResource1 = contentsResource.searchContent("count=6");
Assert.assertEquals(
6, contentSearcherResource1.get().getEntries().size());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Parent Container Uri : " + content1.getParentContentUri());
LOGGER.debug("Status : " + content1.getStatus());
LOGGER.debug("Number of Fields : " + content1.getFields().size());
}
Collection<Field> fields = content.getFields();
Collections.reverse(
(List<Field>) fields);
Iterator<Field> iterator1 = fields.iterator();
Field field = iterator1.next();
final Iterator<Field> iterator2 = content1.getFields().iterator();
Field field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertNotNull(field1.getFieldRawContentUri());
Assert.assertNotNull(field1.getFieldUri());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertTrue(field.getValue().getValue().endsWith(field1.getValue().getValue()));
field = iterator1.next();
field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field1.getValue().getValue());
field = iterator1.next();
field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field1.getValue().getValue());
CollectionFieldValue collectionFieldValue = (CollectionFieldValue) field.getValue();
CollectionFieldValue collectionFieldValue1 = (CollectionFieldValue) field1.getValue();
Assert.assertEquals(collectionFieldValue.getType().toUpperCase(), collectionFieldValue1.getType());
Assert.assertEquals(collectionFieldValue.getValues().size(), collectionFieldValue1.getValues().size());
Iterator<FieldValue> collectionIterator1 = collectionFieldValue.getValues().iterator();
Iterator<FieldValue> collectionIterator2 = collectionFieldValue1.getValues().iterator();
while (collectionIterator1.hasNext()) {
String value1 = collectionIterator1.next().getValue();
String value2 = collectionIterator2.next().getValue();
Assert.assertEquals(value1, value2);
}
field = iterator1.next();
field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field1.getValue().getValue());
field = iterator1.next();
field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field1.getValue().getValue());
field = iterator1.next();
field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field1.getValue().getValue());
field = iterator1.next();
field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field1.getValue().getValue());
field = iterator1.next();
field1 = iterator2.next();
Assert.assertEquals(field.getName(), field1.getName());
Assert.assertEquals(field.getValue().getType().toUpperCase(), field1.getValue().getType());
Assert.assertEquals(field.getValue().getValue(), field1.getValue().getValue());
LOGGER.info(
":::::::::::::: Updating Content Resource ::::::::::::::");
ObjectMapper updateMapper = new ObjectMapper();
String updateJSON = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("Update-Content.json"));
InputStream updateStream = IOUtils.toInputStream(updateJSON);
Content updateContent = updateMapper.readValue(updateStream, Content.class);
updateContent.getFields().add(valueImpl);
updateContent.getFields().add(authorField);
Assert.assertNotNull(updateContent);
RootResource updateResource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> updateWorkspaceFeedResources = updateResource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> updateIterator = updateWorkspaceFeedResources.iterator();
WorkspaceFeedResource updateFeedResource = updateIterator.next();
ContentResource updateContentResource = updateFeedResource.getContents().createContentResource(updateContent);
Content updateContent1 = updateContentResource.get();
Assert.assertNotNull(updateContent1);
Assert.assertEquals(updateContent.getParentContentUri(), updateContent1.getParentContentUri());
Assert.assertEquals(updateContent.getStatus(), updateContent1.getStatus());
Assert.assertEquals(updateContent.getFields().size(), updateContent1.getFields().size());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Parent Container Uri : " + updateContent1.getParentContentUri());
LOGGER.debug("Status : " + updateContent1.getStatus());
LOGGER.debug("Number of Fields : " + updateContent1.getFields().size());
}
Collection<Field> updateFields = updateContent.getFields();
Collections.reverse(
(List<Field>) updateFields);
Iterator<Field> updateIterator1 = updateFields.iterator();
Field updateField = updateIterator1.next();
final Iterator<Field> updateIterator2 = updateContent1.getFields().iterator();
Field updateField1 = updateIterator2.next();
Assert.assertEquals(updateField.getName(), updateField1.getName());
Assert.assertNotNull(updateField1.getFieldRawContentUri());
Assert.assertNotNull(updateField1.getFieldUri());
Assert.assertEquals(updateField.getValue().getType().toUpperCase(), updateField1.getValue().getType());
Assert.assertTrue(updateField.getValue().getValue().endsWith(updateField1.getValue().getValue()));
updateField = updateIterator1.next();
updateField1 = updateIterator2.next();
Assert.assertEquals(updateField.getName(), updateField1.getName());
Assert.assertEquals(updateField.getValue().getType().toUpperCase(), updateField1.getValue().getType());
Assert.assertEquals(updateField.getValue().getValue(), updateField1.getValue().getValue());
updateField = updateIterator1.next();
updateField1 = updateIterator2.next();
Assert.assertEquals(updateField.getName(), updateField1.getName());
Assert.assertEquals(updateField.getValue().getType().toUpperCase(), updateField1.getValue().getType());
Assert.assertEquals(updateField.getValue().getValue(), updateField1.getValue().getValue());
CollectionFieldValue updateCollectionFieldValue = (CollectionFieldValue) updateField.getValue();
CollectionFieldValue updateCollectionFieldValue1 = (CollectionFieldValue) updateField1.getValue();
Assert.assertEquals(updateCollectionFieldValue.getType().toUpperCase(), updateCollectionFieldValue1.getType());
Assert.assertEquals(updateCollectionFieldValue.getValues().size(), updateCollectionFieldValue1.getValues().size());
Iterator<FieldValue> updateCollectionIterator1 = updateCollectionFieldValue.getValues().iterator();
Iterator<FieldValue> updateCollectionIterator2 = updateCollectionFieldValue1.getValues().iterator();
while (updateCollectionIterator1.hasNext()) {
String value1 = updateCollectionIterator1.next().getValue();
String value2 = updateCollectionIterator2.next().getValue();
Assert.assertEquals(value1, value2);
}
updateField = updateIterator1.next();
updateField1 = updateIterator2.next();
Assert.assertEquals(updateField.getName(), updateField1.getName());
Assert.assertEquals(updateField.getValue().getType().toUpperCase(), updateField1.getValue().getType());
Assert.assertEquals(updateField.getValue().getValue(), updateField1.getValue().getValue());
updateField = updateIterator1.next();
updateField1 = updateIterator2.next();
Assert.assertEquals(updateField.getName(), updateField1.getName());
Assert.assertEquals(updateField.getValue().getType().toUpperCase(), updateField1.getValue().getType());
Assert.assertEquals(updateField.getValue().getValue(), updateField1.getValue().getValue());
updateField = updateIterator1.next();
updateField1 = updateIterator2.next();
Assert.assertEquals(updateField.getName(), updateField1.getName());
Assert.assertEquals(updateField.getValue().getType().toUpperCase(), updateField1.getValue().getType());
Assert.assertEquals(updateField.getValue().getValue(), updateField1.getValue().getValue());
updateField = updateIterator1.next();
updateField1 = updateIterator2.next();
Assert.assertEquals(updateField.getName(), updateField1.getName());
Assert.assertEquals(updateField.getValue().getType().toUpperCase(), updateField1.getValue().getType());
Assert.assertEquals(updateField.getValue().getValue(), updateField1.getValue().getValue());
updateField = updateIterator1.next();
updateField1 = updateIterator2.next();
Assert.assertEquals(updateField.getName(), updateField1.getName());
Assert.assertEquals(updateField.getValue().getType().toUpperCase(), updateField1.getValue().getType());
Assert.assertEquals(updateField.getValue().getValue(), updateField1.getValue().getValue());
sleep();
}
@Test
public void testContentRepresentation() throws Exception {
LOGGER.info(":::::::::::::: CONTENT REPRESENTATION RESOURCE TEST ::::::::::::::");
ObjectMapper mapper1 = new ObjectMapper();
String JSON1 = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("DummyContent.json"));
InputStream stream1 = IOUtils.toInputStream(JSON1);
Content contentTest = mapper1.readValue(stream1, Content.class);
Assert.assertNotNull(contentTest);
RootResource resource1 = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources1 = resource1.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iteratorTest = workspaceFeedResources1.iterator();
WorkspaceFeedResource feedResourceTest = iteratorTest.next();
ContentResource contentResourceTest = feedResourceTest.getContents().createContentResource(contentTest);
LOGGER.info(
"Author for representation created!");
sleep();
FieldValueImpl value = new FieldValueImpl();
value.setType(
"content");
value.setValue(contentResourceTest.getUri().toASCIIString());
FieldImpl authorField = new FieldImpl();
authorField.setName(
"Authors");
authorField.setValue(value);
String valueString = "otherValue";
byte[] otherValue = valueString.getBytes();
OtherFieldValueImpl otherFieldValueImpl = new OtherFieldValueImpl();
otherFieldValueImpl.setMimeType(
"jpeg/image");
otherFieldValueImpl.setType(
"other");
otherFieldValueImpl.setValue(Base64.encodeBase64String(otherValue));
FieldImpl valueImpl = new FieldImpl();
valueImpl.setName(
"b");
valueImpl.setValue(otherFieldValueImpl);
ObjectMapper mapper = new ObjectMapper();
String JSON = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("Content.json"));
InputStream stream = IOUtils.toInputStream(JSON);
Content content = mapper.readValue(stream, Content.class);
content.getFields().add(valueImpl);
content.getFields().add(authorField);
Assert.assertNotNull(content);
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
ContentResource contentResource = feedResource.getContents().createContentResource(content);
Collection<String> urls = contentResource.getRepresentationUrls();
Iterator<String> iterator1 = urls.iterator();
while (iterator1.hasNext()) {
String next = iterator1.next();
String type = contentResource.getRepresentation(next);
Assert.assertEquals("some/type", type);
}
sleep();
}
@Test
public void testFieldVariation() throws Exception {
ObjectMapper mapper1 = new ObjectMapper();
String JSON1 = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("DummyContent.json"));
InputStream stream1 = IOUtils.toInputStream(JSON1);
Content contentTest = mapper1.readValue(stream1, Content.class);
Assert.assertNotNull(contentTest);
RootResource resource1 = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources1 = resource1.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iteratorTest = workspaceFeedResources1.iterator();
WorkspaceFeedResource feedResourceTest = iteratorTest.next();
ContentResource contentResourceTest = feedResourceTest.getContents().createContentResource(contentTest);
sleep();
FieldValueImpl value = new FieldValueImpl();
value.setType(
"content");
value.setValue(contentResourceTest.getUri().toASCIIString());
FieldImpl authorField = new FieldImpl();
authorField.setName(
"Authors");
authorField.setValue(value);
String valueString = "otherValue";
byte[] otherValue = valueString.getBytes();
OtherFieldValueImpl otherFieldValueImpl = new OtherFieldValueImpl();
otherFieldValueImpl.setMimeType(
"jpeg/image");
otherFieldValueImpl.setType(
"other");
otherFieldValueImpl.setValue(Base64.encodeBase64String(otherValue));
FieldImpl valueImpl = new FieldImpl();
valueImpl.setName(
"b");
valueImpl.setValue(otherFieldValueImpl);
ObjectMapper mapper = new ObjectMapper();
String JSON = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("Content.json"));
InputStream stream = IOUtils.toInputStream(JSON);
Content content = mapper.readValue(stream, Content.class);
content.getFields().add(valueImpl);
content.getFields().add(authorField);
Assert.assertNotNull(content);
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
ContentResource contentResource = feedResource.getContents().createContentResource(content);
Iterator<FieldResource> iterator2 = contentResource.getFields().iterator();
while (iterator2.hasNext()) {
FieldResource next = iterator2.next();
Collection<String> variations = next.getVariationUrls();
Iterator<String> iterator1 = variations.iterator();
while (iterator1.hasNext()) {
String url = iterator1.next();
String variation = next.getVariation(url);
Assert.assertEquals("some/type", variation);
}
}
}
@Test
public void testSearch() throws Exception {
LOGGER.info(":::::::::::::: SEARCH CONTENT RESOURCE TEST ::::::::::::::");
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
sleep();
String query =
"typeId=atest2:additional:com.smartitengineering.smart-shopping.content:Author&status=published&status=draft&disjunction=true";
ContentSearcherResource searchContent = resource.searchContent(query);
Assert.assertEquals(5, searchContent.get().getEntries().size());
IRI href = searchContent.get().getLink("next").getHref();
query =
"typeId=atest2:additional:com.smartitengineering.smart-shopping.content:Author&status=published&status=draft&disjunction=true&count=10";
searchContent = resource.searchContent(query);
Assert.assertEquals(10, searchContent.get().getEntries().size());
}
@Test
public void testDeleteContent() throws Exception {
LOGGER.info(":::::::::::::: DELETE CONTENT RESOURCE TEST ::::::::::::::");
ObjectMapper mapper1 = new ObjectMapper();
String JSON1 = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("DummyContent.json"));
InputStream stream1 = IOUtils.toInputStream(JSON1);
Content contentTest = mapper1.readValue(stream1, Content.class);
Assert.assertNotNull(contentTest);
RootResource resource1 = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources1 = resource1.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iteratorTest = workspaceFeedResources1.iterator();
WorkspaceFeedResource feedResourceTest = iteratorTest.next();
ContentResource contentResourceTest = feedResourceTest.getContents().createContentResource(contentTest);
sleep();
FieldValueImpl value = new FieldValueImpl();
value.setType(
"content");
value.setValue(contentResourceTest.getUri().toASCIIString());
FieldImpl authorField = new FieldImpl();
authorField.setName(
"Authors");
authorField.setValue(value);
String valueString = "otherValue";
byte[] otherValue = valueString.getBytes();
OtherFieldValueImpl otherFieldValueImpl = new OtherFieldValueImpl();
otherFieldValueImpl.setMimeType(
"jpeg/image");
otherFieldValueImpl.setType(
"other");
otherFieldValueImpl.setValue(Base64.encodeBase64String(otherValue));
FieldImpl valueImpl = new FieldImpl();
valueImpl.setName(
"b");
valueImpl.setValue(otherFieldValueImpl);
ObjectMapper mapper = new ObjectMapper();
String JSON = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("Content.json"));
InputStream stream = IOUtils.toInputStream(JSON);
Content content = mapper.readValue(stream, Content.class);
content.getFields().add(valueImpl);
content.getFields().add(authorField);
Assert.assertNotNull(content);
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
feedResource.getContents().createContentResource(content).delete(ClientResponse.Status.OK);
feedResource.get();
Assert.assertEquals(
0, feedResource.getContents().getContentResources().size());
}
@Test
public void testDeleteContentType() throws Exception {
LOGGER.info(":::::::::::::: DELETE CONTENT_TYPE RESOURCE TEST ::::::::::::::");
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
ContentTypesResource contentTypesResource = feedResource.getContentTypes();
Collection<ContentTypeResource> collection = contentTypesResource.getContentTypes();
Assert.assertEquals(4, collection.size());
ContentTypeResource contentTypeResource = collection.iterator().next();
Assert.assertNotNull(contentTypeResource.get());
contentTypeResource.delete(ClientResponse.Status.OK);
try {
contentTypeResource.get();
}
catch (UniformInterfaceException exception) {
Assert.assertEquals(404, exception.getResponse().getStatus());
}
contentTypesResource.get();
Collection<ContentTypeResource> collection2 = contentTypesResource.getContentTypes();
contentTypeResource = collection2.iterator().next();
Assert.assertNotNull(contentTypeResource.get());
contentTypeResource.delete(ClientResponse.Status.OK);
try {
contentTypeResource.get();
}
catch (UniformInterfaceException exception) {
Assert.assertEquals(404, exception.getResponse().getStatus());
}
contentTypesResource.get();
Collection<ContentTypeResource> collection1 = contentTypesResource.getContentTypes();
Assert.assertEquals(2, collection1.size());
}
protected void testConditionalGetUsingLastModified(final String uri) throws IOException {
HttpClient client = new HttpClient();
GetMethod method = new GetMethod(uri);
client.executeMethod(method);
Assert.assertEquals(200, method.getStatusCode());
Header date = method.getResponseHeader(HttpHeaders.LAST_MODIFIED);
String dateStr = date.getValue();
Header ifDate = new Header(HttpHeaders.IF_MODIFIED_SINCE, dateStr);
method = new GetMethod(uri);
method.addRequestHeader(ifDate);
client.executeMethod(method);
Assert.assertEquals(304, method.getStatusCode());
}
@Test
public void testMultiValidatorWithParams() throws Exception {
WorkspaceFeedResource feedResource = setupMultiValidatorAndParamTest();
ObjectMapper mapper1 = new ObjectMapper();
Content contentTest = mapper1.readValue(
getClass().getClassLoader().getResourceAsStream("testtemplates/Content.json"), Content.class);
ContentResource contentResource = feedResource.getContents().createContentResource(contentTest);
try {
contentTest = mapper1.readValue(getClass().getClassLoader().getResourceAsStream(
"testtemplates/Content_invalid_max.json"), Content.class);
feedResource.getContents().createContentResource(contentTest);
Assert.fail("Should not be able to create content!");
}
catch (Exception ex) {
}
try {
contentTest = mapper1.readValue(getClass().getClassLoader().getResourceAsStream(
"testtemplates/Content_invalid_min.json"), Content.class);
feedResource.getContents().createContentResource(contentTest);
Assert.fail("Should not be able to create content!");
}
catch (Exception ex) {
}
contentResource.delete(ClientResponse.Status.ACCEPTED, ClientResponse.Status.OK);
}
@Test
public void testVariationWithParams() throws Exception {
WorkspaceFeedResource feedResource = setupMultiValidatorAndParamTest();
ObjectMapper mapper1 = new ObjectMapper();
Content contentTest = mapper1.readValue(
getClass().getClassLoader().getResourceAsStream("testtemplates/Content.json"), Content.class);
ContentResource contentResource = feedResource.getContents().createContentResource(contentTest);
String variationUri = contentResource.getLastReadStateOfEntity().getFieldsMap().get("fieldA").getVariationsByNames().
get("avar");
com.smartitengineering.util.rest.client.HttpClient client = contentResource.getClientFactory().getHttpClient();
WebResource varResource = client.getWebResource(URI.create(variationUri));
String variation = varResource.get(String.class);
Assert.assertEquals(
"Nothing ", variation);
contentResource.delete(ClientResponse.Status.ACCEPTED, ClientResponse.Status.OK);
}
@Test
public void testRepresentationWithParams() throws Exception {
WorkspaceFeedResource feedResource = setupMultiValidatorAndParamTest();
ObjectMapper mapper1 = new ObjectMapper();
Content contentTest = mapper1.readValue(
getClass().getClassLoader().getResourceAsStream("testtemplates/Content.json"), Content.class);
ContentResource contentResource = feedResource.getContents().createContentResource(contentTest);
String representationUri = contentResource.getLastReadStateOfEntity().getRepresentationsByName().get("arep");
com.smartitengineering.util.rest.client.HttpClient client = contentResource.getClientFactory().getHttpClient();
WebResource repResource = client.getWebResource(URI.create(representationUri));
String representation = repResource.get(String.class);
Assert.assertEquals(
"Nothing", representation);
representationUri = contentResource.getLastReadStateOfEntity().getRepresentationsByName().get("arep2");
repResource = client.getWebResource(URI.create(representationUri));
representation = repResource.get(String.class);
Assert.assertEquals(
"Nothing I", representation);
contentResource.delete(ClientResponse.Status.ACCEPTED, ClientResponse.Status.OK);
}
@Test
public void testContentTypeExtension() throws Exception {
WorkspaceFeedResource feedResource = setupMultiValidatorAndParamTest();
String contentTypeXml = IOUtils.toString(getClass().getClassLoader().getResourceAsStream(
"testtemplates/content-type-extension.xml"));
feedResource.getContentTypes().createContentType(contentTypeXml);
com.smartitengineering.cms.api.impl.workspace.WorkspaceIdImpl id =
new com.smartitengineering.cms.api.impl.workspace.WorkspaceIdImpl();
id.setGlobalNamespace("test");
id.setName("templates");
ContentTypeIdImpl idImpl = new ContentTypeIdImpl();
idImpl.setWorkspace(id);
idImpl.setNamespace("test");
idImpl.setName("TypeB");
ContentType type = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(idImpl);
Assert.assertFalse(type.getStatuses().isEmpty());
Assert.assertFalse(type.getRepresentationDefs().isEmpty());
Assert.assertEquals(1, type.getStatuses().size());
Assert.assertEquals(2, type.getRepresentationDefs().size());
idImpl = new ContentTypeIdImpl();
idImpl.setWorkspace(id);
idImpl.setNamespace("test");
idImpl.setName("TypeC");
type = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(idImpl);
Assert.assertFalse(type.getStatuses().isEmpty());
Assert.assertFalse(type.getRepresentationDefs().isEmpty());
Assert.assertEquals(1, type.getStatuses().size());
Assert.assertEquals(2, type.getRepresentationDefs().size());
idImpl = new ContentTypeIdImpl();
idImpl.setWorkspace(id);
idImpl.setNamespace("test");
idImpl.setName("TypeD");
type = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(idImpl);
Assert.assertFalse(type.getStatuses().isEmpty());
Assert.assertFalse(type.getRepresentationDefs().isEmpty());
Assert.assertEquals(1, type.getStatuses().size());
Assert.assertEquals(3, type.getRepresentationDefs().size());
idImpl = new ContentTypeIdImpl();
idImpl.setWorkspace(id);
idImpl.setNamespace("test");
idImpl.setName("TypeE");
type = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(idImpl);
Assert.assertFalse(type.getStatuses().isEmpty());
Assert.assertFalse(type.getRepresentationDefs().isEmpty());
Assert.assertEquals(2, type.getStatuses().size());
Assert.assertEquals(2, type.getRepresentationDefs().size());
idImpl = new ContentTypeIdImpl();
idImpl.setWorkspace(id);
idImpl.setNamespace("test");
idImpl.setName("TypeF");
type = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(idImpl);
Assert.assertFalse(type.getStatuses().isEmpty());
Assert.assertTrue(type.getRepresentationDefs().isEmpty());
Assert.assertEquals(1, type.getStatuses().size());
Assert.assertEquals(0, type.getRepresentationDefs().size());
}
private WorkspaceFeedResource setupMultiValidatorAndParamTest() {
RootResource resource = RootResourceImpl.getRoot(URI.create(ROOT_URI_STRING));
resource.get();
WorkspaceFeedResource feedResource;
try {
feedResource = resource.getTemplates().getWorkspaceResource("test", "templates");
}
catch (Exception ex) {
feedResource = null;
LOGGER.info("Exception getting feed resoruce", ex);
}
boolean valid = false;
if (feedResource == null) {
try {
Workspace workspace = resource.createWorkspace(new WorkspaceIdImpl("test", "templates"));
feedResource = resource.getTemplates().getWorkspaceResource(workspace.getId().getGlobalNamespace(), workspace.
getId().getName());
String contentTypeXml = IOUtils.toString(getClass().getClassLoader().getResourceAsStream(
"testtemplates/content-type-templates.xml"));
feedResource.getContentTypes().createContentType(contentTypeXml);
ResourceTemplateImpl template = new ResourceTemplateImpl();
template.setName("internalval");
template.setTemplate(IOUtils.toByteArray(getClass().getClassLoader().getResourceAsStream(
"testtemplates/validator.groovy")));
template.setTemplateType("GROOVY");
template.setWorkspaceId(workspace.getId());
feedResource.getValidators().createValidator(template);
template = new ResourceTemplateImpl();
template.setName("internalvar");
template.setTemplate(IOUtils.toByteArray(getClass().getClassLoader().getResourceAsStream(
"testtemplates/variation.groovy")));
template.setTemplateType("GROOVY");
template.setWorkspaceId(workspace.getId());
feedResource.getVariations().createVariation(template);
template = new ResourceTemplateImpl();
template.setName("internalrep");
template.setTemplate(IOUtils.toByteArray(getClass().getClassLoader().getResourceAsStream(
"testtemplates/representation.groovy")));
template.setTemplateType("GROOVY");
template.setWorkspaceId(workspace.getId());
feedResource.getRepresentations().createRepresentations(template);
template = new ResourceTemplateImpl();
template.setName("vmrep");
template.setTemplate(IOUtils.toByteArray(getClass().getClassLoader().getResourceAsStream(
"testtemplates/anotherrep.vm")));
template.setTemplateType("VELOCITY");
template.setWorkspaceId(workspace.getId());
feedResource.getRepresentations().createRepresentations(template);
valid = true;
}
catch (Exception ex) {
LOGGER.error("Error creating test workspace for templates", ex);
}
}
else {
valid = true;
}
Assert.assertTrue(valid);
return feedResource;
}
private WorkspaceFeedResource setupCompositeWorkspace() {
RootResource resource = RootResourceImpl.getRoot(URI.create(ROOT_URI_STRING));
resource.get();
WorkspaceFeedResource feedResource;
try {
feedResource = resource.getTemplates().getWorkspaceResource("test", "composites");
}
catch (Exception ex) {
feedResource = null;
LOGGER.info("Exception getting feed resoruce", ex);
}
boolean valid = false;
if (feedResource == null) {
try {
Workspace workspace = resource.createWorkspace(new WorkspaceIdImpl("test", "composites"));
feedResource = resource.getTemplates().getWorkspaceResource(workspace.getId().getGlobalNamespace(), workspace.
getId().getName());
ResourceTemplateImpl template = new ResourceTemplateImpl();
template.setName("internalval");
template.setTemplate(IOUtils.toByteArray(getClass().getClassLoader().getResourceAsStream(
"testtemplates/validator.groovy")));
template.setTemplateType("GROOVY");
template.setWorkspaceId(workspace.getId());
feedResource.getValidators().createValidator(template);
valid = true;
}
catch (Exception ex) {
LOGGER.error("Error creating test workspace for templates", ex);
}
}
else {
valid = true;
}
Assert.assertTrue(valid);
return feedResource;
}
@Test
public void testCreateCompositeContentType() throws Exception {
LOGGER.info("~~~~~~~~~~~~~~~~~~~~~~~~~~ COMPOSITE CONTENT TYPE CREATION ~~~~~~~~~~~~~~~~~~~~~~~~~");
WorkspaceFeedResource feedResource = setupCompositeWorkspace();
String contentTypeXml = IOUtils.toString(getClass().getClassLoader().getResourceAsStream(
"composite/content-type-def-with-composition.xml"));
feedResource.getContentTypes().createContentType(contentTypeXml);
com.smartitengineering.cms.api.impl.workspace.WorkspaceIdImpl id =
new com.smartitengineering.cms.api.impl.workspace.WorkspaceIdImpl();
id.setGlobalNamespace("test");
id.setName("composites");
ContentTypeIdImpl idImpl = new ContentTypeIdImpl();
idImpl.setWorkspace(id);
idImpl.setNamespace("test");
idImpl.setName("Order");
ContentType type = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(idImpl);
Assert.assertNotNull(type);
Collection<FieldDef> compositeFieldDefs = type.getFieldDefs().values();
Assert.assertEquals(3, compositeFieldDefs.size());
final Iterator<FieldDef> mainIterator = compositeFieldDefs.iterator();
FieldDef field = mainIterator.next();
Assert.assertEquals(FieldValueType.COMPOSITE, field.getValueDef().getType());
CompositeDataType compositeDataType = (CompositeDataType) field.getValueDef();
Assert.assertNotNull(compositeDataType.getEmbeddedContentType());
Assert.assertEquals(2, compositeDataType.getOwnComposition().size());
Assert.assertEquals(9, compositeDataType.getComposition().size());
Map<String, String> parameters = compositeDataType.getComposedFieldDefs().get("astreet1").getParameters();
Assert.assertEquals(1, parameters.size());
Assert.assertEquals("fieldVal", parameters.get("fieldParam"));
parameters = compositeDataType.getComposedFieldDefs().get("astreet2").getParameterizedDisplayNames();
Assert.assertEquals(1, parameters.size());
Assert.assertEquals("Street (Line 2) (en-US)", parameters.get("en-US"));
Iterator<FieldDef> compositionIterator = compositeDataType.getOwnComposition().iterator();
compositionIterator.next();
FieldDef collectionFieldDef = compositionIterator.next();
Assert.assertEquals(FieldValueType.COLLECTION, collectionFieldDef.getValueDef().getType());
CollectionDataType collectionDataType = (CollectionDataType) collectionFieldDef.getValueDef();
Assert.assertEquals(FieldValueType.COMPOSITE, collectionDataType.getItemDataType().getType());
compositeDataType = (CompositeDataType) collectionDataType.getItemDataType();
Assert.assertEquals(2, compositeDataType.getOwnComposition().size());
final Iterator<FieldDef> ownComposition = compositeDataType.getOwnComposition().iterator();
Assert.assertEquals("anumber", ownComposition.next().getName());
Assert.assertEquals("availability", ownComposition.next().getName());
field = mainIterator.next();
Assert.assertEquals(FieldValueType.COMPOSITE, field.getValueDef().getType());
compositeDataType = (CompositeDataType) field.getValueDef();
Assert.assertNotNull(compositeDataType.getEmbeddedContentType());
Assert.assertEquals(0, compositeDataType.getOwnComposition().size());
field = mainIterator.next();
Assert.assertEquals(FieldValueType.COLLECTION, field.getValueDef().getType());
collectionDataType = (CollectionDataType) field.getValueDef();
Assert.assertEquals(FieldValueType.COMPOSITE, collectionDataType.getItemDataType().getType());
compositeDataType = (CompositeDataType) collectionDataType.getItemDataType();
Assert.assertNull(compositeDataType.getEmbeddedContentType());
Assert.assertEquals(2, compositeDataType.getOwnComposition().size());
parameters = compositeDataType.getComposedFieldDefs().get("By").getParameters();
Assert.assertEquals(1, parameters.size());
Assert.assertEquals("fieldVal", parameters.get("fieldParam"));
idImpl.setName("Address");
type = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(idImpl);
parameters = type.getParameterizedDisplayNames();
Assert.assertEquals(1, parameters.size());
Assert.assertEquals("Address (en-US)", parameters.get("en-US"));
}
@Test
public void testCreateContentWithCompositeField() throws Exception {
LOGGER.info("~~~~~~~~~~~~~~~~~~~~~~~~~~ COMPOSITE CONTENT CREATION ~~~~~~~~~~~~~~~~~~~~~~~~~");
WorkspaceFeedResource feedResource = setupCompositeWorkspace();
final Properties properties = new Properties();
properties.load(getClass().getClassLoader().getResourceAsStream(
"composite/form-value.properties"));
Set<Object> formKeys = properties.keySet();
FormDataMultiPart multiPart = new FormDataMultiPart();
for (Object key : formKeys) {
multiPart.field(key.toString(), properties.getProperty(key.toString()));
}
ClientResponse response = feedResource.getContents().post(MediaType.MULTIPART_FORM_DATA, multiPart,
ClientResponse.Status.CREATED,
ClientResponse.Status.ACCEPTED, ClientResponse.Status.OK);
URI uri = response.getLocation();
ContentResourceImpl resourceImpl = new ContentResourceImpl(feedResource, uri);
final Content lastReadStateOfEntity = resourceImpl.getLastReadStateOfEntity();
Assert.assertNotNull(lastReadStateOfEntity);
Assert.assertEquals("i", ((CompositeFieldValue) lastReadStateOfEntity.getFieldsMap().get("billingAddress").getValue()).
getValues().get("astreet1").getValue().getValue());
ContentResource resource = feedResource.getContents().createContentResource(lastReadStateOfEntity);
Assert.assertNotNull(resource.getLastReadStateOfEntity());
resource.update(lastReadStateOfEntity);
resource.get();
Assert.assertNotNull(resource.getLastReadStateOfEntity());
}
@Test
public void testRequiredFieldValidationForCompositeField() throws Exception {
LOGGER.info("~~~~~~~~~~~~~~~~~~~~~~~~~~ MANDATORY COMPOSITE FIELD VALIDATION ~~~~~~~~~~~~~~~~~~~~~~~~~");
WorkspaceFeedResource feedResource = setupCompositeWorkspace();
final String[] resources = new String[]{"composite/form-value-invalid-collection.properties",
"composite/form-value-invalid-complex.properties", "composite/form-value-invalid-composition.properties",
"composite/form-value-invalid-content.properties"};
for (String resource : resources) {
final Properties properties = new Properties();
properties.load(getClass().getClassLoader().getResourceAsStream(
resource));
Set<Object> formKeys = properties.keySet();
FormDataMultiPart multiPart = new FormDataMultiPart();
for (Object key : formKeys) {
multiPart.field(key.toString(), properties.getProperty(key.toString()));
}
try {
feedResource.getContents().post(MediaType.MULTIPART_FORM_DATA, multiPart, ClientResponse.Status.CREATED,
ClientResponse.Status.ACCEPTED, ClientResponse.Status.OK);
Assert.fail("Invalid content should have failed for " + resource);
}
catch (Exception ex) {
//Expected that creation fails
}
}
}
@Test
public void testCustomFieldValidationForCompositeField() throws Exception {
LOGGER.info("~~~~~~~~~~~~~~~~~~~~~~~~~~ CUSTOM COMPOSITE FIELD VALIDATION ~~~~~~~~~~~~~~~~~~~~~~~~~");
WorkspaceFeedResource feedResource = setupCompositeWorkspace();
final String[] invalidResources = new String[]{"composite/form-value-invalid-custom_validation.properties"};
for (String resource : invalidResources) {
final Properties properties = new Properties();
properties.load(getClass().getClassLoader().getResourceAsStream(
resource));
Set<Object> formKeys = properties.keySet();
FormDataMultiPart multiPart = new FormDataMultiPart();
for (Object key : formKeys) {
multiPart.field(key.toString(), properties.getProperty(key.toString()));
}
try {
feedResource.getContents().post(MediaType.MULTIPART_FORM_DATA, multiPart, ClientResponse.Status.CREATED,
ClientResponse.Status.ACCEPTED, ClientResponse.Status.OK);
Assert.fail("Invalid content should have failed for " + resource);
}
catch (Exception ex) {
//Expected that creation fails
}
}
final String[] validResources = new String[]{"composite/form-value-valid-custom_validation.properties"};
for (String resource : validResources) {
final Properties properties = new Properties();
properties.load(getClass().getClassLoader().getResourceAsStream(
resource));
Set<Object> formKeys = properties.keySet();
FormDataMultiPart multiPart = new FormDataMultiPart();
for (Object key : formKeys) {
multiPart.field(key.toString(), properties.getProperty(key.toString()));
}
try {
ClientResponse response = feedResource.getContents().post(MediaType.MULTIPART_FORM_DATA, multiPart,
ClientResponse.Status.CREATED,
ClientResponse.Status.ACCEPTED,
ClientResponse.Status.OK);
URI uri = response.getLocation();
ContentResourceImpl resourceImpl = new ContentResourceImpl(feedResource, uri);
final Content lastReadStateOfEntity = resourceImpl.getLastReadStateOfEntity();
Assert.assertNotNull(lastReadStateOfEntity);
}
catch (Exception ex) {
LOGGER.error(ex.getMessage(), ex);
Assert.fail("Valid content should not have failed for " + resource);
}
}
}
@Test
public void testDefTypePersistence() throws Exception {
com.smartitengineering.cms.api.impl.workspace.WorkspaceIdImpl id =
new com.smartitengineering.cms.api.impl.workspace.WorkspaceIdImpl();
id.setGlobalNamespace("test");
id.setName("composites");
ContentTypeIdImpl idImpl = new ContentTypeIdImpl();
idImpl.setWorkspace(id);
idImpl.setNamespace("test");
idImpl.setName("Address");
ContentType type = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(idImpl);
Assert.assertEquals(ContentType.DefinitionType.CONCRETE_COMPONENT, type.getDefinitionType());
}
@Test
public void testNonConcreteTypeCreate() throws Exception {
LOGGER.info("~~~~~~~~~~~~~~~~~~~~~~~~~~ CREATE NON CONCRETE TYPE CONTENT ~~~~~~~~~~~~~~~~~~~~~~~~~");
WorkspaceFeedResource feedResource = setupCompositeWorkspace();
final String[] invalidResources = new String[]{"composite/address-form.properties"};
for (String resource : invalidResources) {
final Properties properties = new Properties();
properties.load(getClass().getClassLoader().getResourceAsStream(
resource));
Set<Object> formKeys = properties.keySet();
FormDataMultiPart multiPart = new FormDataMultiPart();
for (Object key : formKeys) {
multiPart.field(key.toString(), properties.getProperty(key.toString()));
}
try {
feedResource.getContents().post(MediaType.MULTIPART_FORM_DATA, multiPart, ClientResponse.Status.CREATED,
ClientResponse.Status.ACCEPTED, ClientResponse.Status.OK);
Assert.fail("Invalid content should have failed for " + resource);
}
catch (Exception ex) {
//Expected that creation fails
}
}
}
@Test
public void testContentStatusesResource() throws Exception {
LOGGER.info("~~~~~~~~~~~~~~~~~~~~~~~~~~ Content TYPE STATUSES ~~~~~~~~~~~~~~~~~~~~~~~~~");
WorkspaceFeedResource feedResource = setupCompositeWorkspace();
RootResource resource = RootResourceImpl.getRoot(URI.create(ROOT_URI_STRING));
resource.get();
ContentTypeFeedResource typeFeedResource = resource.getTemplates().getContentTypeResource(feedResource.
getWorkspaceNamespace(), feedResource.getWorkspaceName(), "test", "Address");
Assert.assertNotNull(typeFeedResource);
Assert.assertNotNull(typeFeedResource.getStatuses());
Assert.assertFalse(typeFeedResource.getStatuses().isEmpty());
}
private WorkspaceFeedResource setupEnumWorkspace() {
RootResource resource = RootResourceImpl.getRoot(URI.create(ROOT_URI_STRING));
resource.get();
WorkspaceFeedResource feedResource;
try {
feedResource = resource.getTemplates().getWorkspaceResource("test", "enums");
}
catch (Exception ex) {
feedResource = null;
LOGGER.info("Exception getting feed resoruce", ex);
}
boolean valid = false;
if (feedResource == null) {
try {
Workspace workspace = resource.createWorkspace(new WorkspaceIdImpl("test", "enums"));
feedResource = resource.getTemplates().getWorkspaceResource(workspace.getId().getGlobalNamespace(), workspace.
getId().getName());
String contentTypeXml = IOUtils.toString(getClass().getClassLoader().getResourceAsStream(
"enum/content-type-def-with-enum.xml"));
feedResource.getContentTypes().createContentType(contentTypeXml);
contentTypeXml = IOUtils.toString(getClass().getClassLoader().getResourceAsStream(
"contentcoprocessors/content-type-def-with-enum.xml"));
feedResource.getContentTypes().createContentType(contentTypeXml);
valid = true;
}
catch (Exception ex) {
LOGGER.error("Error creating test workspace for templates", ex);
}
}
else {
valid = true;
}
Assert.assertTrue(valid);
return feedResource;
}
@Test
public void testCreateEnumContentType() throws Exception {
LOGGER.info("~~~~~~~~~~~~~~~~~~~~~~~~~~ ENUM CONTENT TYPE CREATION ~~~~~~~~~~~~~~~~~~~~~~~~~");
WorkspaceFeedResource feedResource = setupEnumWorkspace();
com.smartitengineering.cms.api.impl.workspace.WorkspaceIdImpl id =
new com.smartitengineering.cms.api.impl.workspace.WorkspaceIdImpl();
id.setGlobalNamespace(feedResource.getWorkspaceNamespace());
id.setName(feedResource.getWorkspaceName());
ContentTypeIdImpl idImpl = new ContentTypeIdImpl();
idImpl.setWorkspace(id);
idImpl.setNamespace("enum");
idImpl.setName("EnumTest");
ContentType type = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(idImpl);
Assert.assertNotNull(type);
Map<String, FieldDef> enumFieldDefs = type.getFieldDefs();
Assert.assertEquals(5, enumFieldDefs.size());
FieldDef directFieldDef = enumFieldDefs.get("directEnumField");
Assert.assertNotNull(directFieldDef);
LOGGER.debug("+++++++++++++++++++++ Direct Enum CHOICES " +
((EnumDataType) directFieldDef.getValueDef()).getChoices());
Assert.assertTrue(((EnumDataType) directFieldDef.getValueDef()).getChoices().contains("1"));
Assert.assertTrue(((EnumDataType) directFieldDef.getValueDef()).getChoices().contains("2"));
FieldDef collectiveFieldDef = enumFieldDefs.get("collectiveEnumField");
Assert.assertNotNull(collectiveFieldDef);
Assert.assertTrue(((EnumDataType) ((CollectionDataType) collectiveFieldDef.getValueDef()).getItemDataType()).
getChoices().contains("3"));
Assert.assertTrue(((EnumDataType) ((CollectionDataType) collectiveFieldDef.getValueDef()).getItemDataType()).
getChoices().contains("4"));
FieldDef compositedFieldDef = enumFieldDefs.get("compositedEnumField");
Assert.assertNotNull(compositedFieldDef);
Assert.assertTrue(((EnumDataType) ((CompositeDataType) compositedFieldDef.getValueDef()).getComposedFieldDefs().get(
"enumField").getValueDef()).getChoices().contains("5"));
Assert.assertTrue(((EnumDataType) ((CompositeDataType) compositedFieldDef.getValueDef()).getComposedFieldDefs().get(
"enumField").getValueDef()).getChoices().contains("6"));
CompositeDataType compositedDataType = (CompositeDataType) ((CollectionDataType) enumFieldDefs.get(
"collectiveCompositedEnumField").getValueDef()).
getItemDataType();
Assert.assertNotNull(compositedFieldDef);
Assert.assertTrue(((EnumDataType) compositedDataType.getComposedFieldDefs().get(
"enumField").getValueDef()).getChoices().contains("7"));
Assert.assertTrue(((EnumDataType) compositedDataType.getComposedFieldDefs().get(
"enumField").getValueDef()).getChoices().contains("8"));
Collection<ContentTypeFeedResource> typeFeeds = feedResource.getContentTypes().getContentTypeFeeds();
Assert.assertNotNull(typeFeeds);
Assert.assertEquals(2, typeFeeds.size());
ContentTypeFeedResource feed = typeFeeds.iterator().next();
Collection<com.smartitengineering.cms.ws.common.domains.FieldDef> defs = feed.getFieldDefs();
Assert.assertEquals(5, defs.size());
Map<String, com.smartitengineering.cms.ws.common.domains.FieldDef> wDefs =
new HashMap<String, com.smartitengineering.cms.ws.common.domains.FieldDef>();
for (com.smartitengineering.cms.ws.common.domains.FieldDef def : defs) {
wDefs.put(def.getName(), def);
}
com.smartitengineering.cms.ws.common.domains.FieldDef wDirectFieldDef = wDefs.get("directEnumField");
Assert.assertNotNull(wDirectFieldDef);
Assert.assertTrue(wDirectFieldDef instanceof EnumFieldDef);
Assert.assertTrue(((EnumFieldDef) wDirectFieldDef).getChoices().contains("1"));
Assert.assertTrue(((EnumFieldDef) wDirectFieldDef).getChoices().contains("2"));
com.smartitengineering.cms.ws.common.domains.FieldDef wCollectiveFieldDef = wDefs.get("collectiveEnumField");
Assert.assertNotNull(wCollectiveFieldDef);
Assert.assertNotNull(((CollectionFieldDef) wCollectiveFieldDef).getItemDef());
Assert.assertTrue(((CollectionFieldDef) wCollectiveFieldDef).getItemDef() instanceof EnumFieldDef);
Assert.assertTrue(
((EnumFieldDef) ((CollectionFieldDef) wCollectiveFieldDef).getItemDef()).getChoices().contains("3"));
Assert.assertTrue(
((EnumFieldDef) ((CollectionFieldDef) wCollectiveFieldDef).getItemDef()).getChoices().contains("4"));
com.smartitengineering.cms.ws.common.domains.FieldDef wCompositedFieldDef = wDefs.get("compositedEnumField");
Assert.assertNotNull(wCompositedFieldDef);
Assert.assertNotNull(((CompositeFieldDef) wCompositedFieldDef).getComposedFields().get("enumField"));
Assert.assertTrue(
((CompositeFieldDef) wCompositedFieldDef).getComposedFields().get("enumField") instanceof EnumFieldDef);
Assert.assertTrue(((EnumFieldDef) ((CompositeFieldDef) wCompositedFieldDef).getComposedFields().get("enumField")).
getChoices().contains("5"));
Assert.assertTrue(((EnumFieldDef) ((CompositeFieldDef) wCompositedFieldDef).getComposedFields().get("enumField")).
getChoices().contains("6"));
wCompositedFieldDef = ((CollectionFieldDef) wDefs.get("collectiveCompositedEnumField")).getItemDef();
Assert.assertNotNull(wCompositedFieldDef);
Assert.assertNotNull(((CompositeFieldDef) wCompositedFieldDef).getComposedFields().get("enumField"));
Assert.assertTrue(
((CompositeFieldDef) wCompositedFieldDef).getComposedFields().get("enumField") instanceof EnumFieldDef);
Assert.assertTrue(((EnumFieldDef) ((CompositeFieldDef) wCompositedFieldDef).getComposedFields().get("enumField")).
getChoices().contains("7"));
Assert.assertTrue(((EnumFieldDef) ((CompositeFieldDef) wCompositedFieldDef).getComposedFields().get("enumField")).
getChoices().contains("8"));
}
@Test
public void testCreateContentWithEnumField() throws Exception {
LOGGER.info("~~~~~~~~~~~~~~~~~~~~~~~~~~ ENUM CONTENT CREATION ~~~~~~~~~~~~~~~~~~~~~~~~~");
WorkspaceFeedResource feedResource = setupEnumWorkspace();
Properties properties = new Properties();
properties.load(getClass().getClassLoader().getResourceAsStream(
"enum/form-value.properties"));
Set<Object> formKeys = properties.keySet();
FormDataMultiPart multiPart = new FormDataMultiPart();
for (Object key : formKeys) {
multiPart.field(key.toString(), properties.getProperty(key.toString()));
}
ClientResponse response = feedResource.getContents().post(MediaType.MULTIPART_FORM_DATA, multiPart,
ClientResponse.Status.CREATED,
ClientResponse.Status.ACCEPTED, ClientResponse.Status.OK);
URI uri = response.getLocation();
ContentResourceImpl resourceImpl = new ContentResourceImpl(feedResource, uri);
final Content lastReadStateOfEntity = resourceImpl.getLastReadStateOfEntity();
Assert.assertNotNull(lastReadStateOfEntity);
Field field = lastReadStateOfEntity.getFieldsMap().get("directEnumField");
String val = field.getValue().getValue();
Assert.assertEquals("1", val);
field = ((CompositeFieldValue) lastReadStateOfEntity.getFieldsMap().get("compositedEnumField").getValue()).getValues().
get("enumField");
val = field.getValue().getValue();
Assert.assertEquals("5", val);
val = ((CollectionFieldValue) lastReadStateOfEntity.getFieldsMap().get("collectiveEnumField").getValue()).getValues().
iterator().next().getValue();
Assert.assertEquals("4", val);
sleep();
for (int i = 1; i < 5; ++i) {
try {
properties = new Properties();
properties.load(getClass().getClassLoader().getResourceAsStream(
"enum/form-invalid-value-" + i + ".properties"));
formKeys = properties.keySet();
multiPart = new FormDataMultiPart();
for (Object key : formKeys) {
multiPart.field(key.toString(), properties.getProperty(key.toString()));
}
feedResource.getContents().post(MediaType.MULTIPART_FORM_DATA, multiPart, ClientResponse.Status.CREATED,
ClientResponse.Status.ACCEPTED, ClientResponse.Status.OK);
Assert.fail("Invalid content should have failed " + i);
}
catch (Exception ex) {
//Expected that creation fails
}
}
}
@Test
public void testCreateContentCoProcessor() throws Exception {
ResourceTemplateImpl template = new ResourceTemplateImpl();
String temp = "Template";
template.setName("rep");
final byte[] bytes = temp.getBytes();
template.setTemplate(bytes);
template.setTemplateType(TemplateType.JAVASCRIPT.toString());
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
WorkspaceContentCoProcessorsResource rsrcs = feedResource.getContentCoProcessors();
WorkspaceContentCoProcessorResource rsrc = rsrcs.createContentCoProcessor(
template);
Assert.assertEquals("rep", rsrc.get().getName());
Assert.assertEquals(temp, new String(rsrc.get().getTemplate()));
Assert.assertEquals(TemplateType.JAVASCRIPT.toString(), rsrc.get().getTemplateType());
}
@Test
public void testUpdateContentCoProcessor() throws Exception {
LOGGER.info(":::::::::::::: UPDATE CONTENT CO PROCESSOR RESOURCE TEST ::::::::::::::");
ResourceTemplateImpl template = new ResourceTemplateImpl();
String temp = "newTemplate";
final byte[] bytes = temp.getBytes();
template.setTemplate(bytes);
template.setTemplateType(TemplateType.RUBY.toString());
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
Collection<WorkspaceContentCoProcessorResource> representationResources = feedResource.getContentCoProcessors().
getContentCoProcessorResources();
Assert.assertEquals(1, representationResources.size());
Iterator<WorkspaceContentCoProcessorResource> representationIterator = representationResources.iterator();
WorkspaceContentCoProcessorResource rsrc = representationIterator.next();
rsrc.update(template);
Assert.assertEquals("rep", rsrc.get().getName());
Assert.assertEquals(temp, new String(rsrc.get().getTemplate()));
Assert.assertEquals(TemplateType.RUBY.toString(), rsrc.get().getTemplateType());
resource.getWorkspaceFeeds();
WorkspaceContentCoProcessorResource secondRepresentationResource = resource.getWorkspaceFeeds().iterator().next().
getContentCoProcessors().getContentCoProcessorResources().iterator().next();
template.setTemplateType(TemplateType.JAVASCRIPT.name());
secondRepresentationResource.update(template);
Assert.assertEquals(TemplateType.JAVASCRIPT.name(), secondRepresentationResource.get().getTemplateType());
try {
rsrc.update(template);
Assert.fail("Should not have been able to update!");
}
catch (UniformInterfaceException ex) {
//Exception expected
rsrc.get();
rsrc.update(template);
}
sleep();
}
@Test
public void testDeleteContentCoProcessor() throws Exception {
LOGGER.info(":::::::::::::: DELETE CONTENT CO PROCESSOR RESOURCE TEST ::::::::::::::");
ResourceTemplateImpl template = new ResourceTemplateImpl();
String temp = "Template2";
template.setName("rep2");
final byte[] bytes = temp.getBytes();
template.setTemplate(bytes);
template.setTemplateType(TemplateType.JAVASCRIPT.toString());
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
Collection<WorkspaceFeedResource> workspaceFeedResources = resource.getWorkspaceFeeds();
Iterator<WorkspaceFeedResource> iterator = workspaceFeedResources.iterator();
WorkspaceFeedResource feedResource = iterator.next();
final WorkspaceContentCoProcessorsResource procsResource = feedResource.getContentCoProcessors();
Collection<WorkspaceContentCoProcessorResource> rsrcs = procsResource.getContentCoProcessorResources();
Assert.assertEquals(1, rsrcs.size());
procsResource.createContentCoProcessor(template);
Iterator<WorkspaceContentCoProcessorResource> representationIterator = rsrcs.iterator();
WorkspaceContentCoProcessorResource rsrc = representationIterator.next();
rsrc.delete(ClientResponse.Status.ACCEPTED);
Collection<WorkspaceContentCoProcessorResource> secRsrcs = resource.getWorkspaceFeeds().iterator().
next().getContentCoProcessors().getContentCoProcessorResources();
Assert.assertEquals(1, secRsrcs.size());
sleep();
}
@Test
public void testCreateContentTypeWithContentCoProcessors() {
WorkspaceFeedResource feedResource = setupEnumWorkspace();
com.smartitengineering.cms.api.impl.workspace.WorkspaceIdImpl id =
new com.smartitengineering.cms.api.impl.workspace.WorkspaceIdImpl();
id.setGlobalNamespace(feedResource.getWorkspaceNamespace());
id.setName(feedResource.getWorkspaceName());
ContentTypeIdImpl idImpl = new ContentTypeIdImpl();
idImpl.setWorkspace(id);
idImpl.setNamespace("enum");
idImpl.setName("ContentCoProcessorTest");
ContentType type = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(idImpl);
final Map<ContentProcessingPhase, Collection<ContentCoProcessorDef>> contentCoProcessorDefs =
type.getContentCoProcessorDefs();
Assert.assertNotNull(contentCoProcessorDefs);
Assert.assertFalse(contentCoProcessorDefs.isEmpty());
Assert.assertNotNull(contentCoProcessorDefs.get(ContentProcessingPhase.READ));
Assert.assertNotNull(contentCoProcessorDefs.get(ContentProcessingPhase.WRITE));
Assert.assertFalse(contentCoProcessorDefs.get(ContentProcessingPhase.READ).isEmpty());
Assert.assertFalse(contentCoProcessorDefs.get(ContentProcessingPhase.WRITE).isEmpty());
Assert.assertEquals(2, contentCoProcessorDefs.get(ContentProcessingPhase.READ).size());
Assert.assertEquals(1, contentCoProcessorDefs.get(ContentProcessingPhase.WRITE).size());
final Iterator<ContentCoProcessorDef> readItr =
contentCoProcessorDefs.get(ContentProcessingPhase.READ).iterator();
ContentCoProcessorDef def = readItr.next();
Assert.assertEquals("testr", def.getName());
Assert.assertNull(def.getMIMEType());
Assert.assertEquals(0, def.getPriority());
Assert.assertEquals(1, def.getParameters().size());
Assert.assertEquals("v", def.getParameters().get("k"));
Assert.assertEquals("test", def.getResourceUri().getValue());
def = readItr.next();
Assert.assertEquals("testr1", def.getName());
Assert.assertNull(def.getMIMEType());
Assert.assertEquals(1, def.getPriority());
Assert.assertEquals(1, def.getParameters().size());
Assert.assertEquals("v1", def.getParameters().get("k1"));
Assert.assertEquals("test1", def.getResourceUri().getValue());
def = contentCoProcessorDefs.get(ContentProcessingPhase.WRITE).iterator().next();
Assert.assertEquals("testw", def.getName());
Assert.assertNull(def.getMIMEType());
Assert.assertEquals(0, def.getPriority());
Assert.assertEquals(1, def.getParameters().size());
Assert.assertEquals("v2", def.getParameters().get("k2"));
Assert.assertEquals("test2", def.getResourceUri().getValue());
sleep();
}
private WorkspaceFeedResource setupContentCoProcessorExecWorkspace() {
RootResource resource = RootResourceImpl.getRoot(URI.create(ROOT_URI_STRING));
resource.get();
WorkspaceFeedResource feedResource;
try {
feedResource = resource.getTemplates().getWorkspaceResource("test", "enums");
}
catch (Exception ex) {
feedResource = null;
LOGGER.info("Exception getting feed resoruce", ex);
}
boolean valid = false;
{
try {
final WorkspaceIdImpl workspaceId = new WorkspaceIdImpl("test", "enums");
if (feedResource == null) {
Workspace workspace = resource.createWorkspace(workspaceId);
feedResource = resource.getTemplates().getWorkspaceResource(workspace.getId().getGlobalNamespace(), workspace.
getId().getName());
}
String contentTypeXml = IOUtils.toString(getClass().getClassLoader().getResourceAsStream(
"contentcoprocessors/content-type-def-with-enum-ext.xml"));
feedResource.getContentTypes().createContentType(contentTypeXml);
ResourceTemplateImpl template = new ResourceTemplateImpl();
template.setName("test");
template.setTemplate(IOUtils.toByteArray(getClass().getClassLoader().getResourceAsStream(
"contentcoprocessors/coprocessor.groovy")));
template.setTemplateType("GROOVY");
template.setWorkspaceId(workspaceId);
feedResource.getContentCoProcessors().createContentCoProcessor(template);
valid = true;
}
catch (Exception ex) {
LOGGER.error("Error creating test workspace for templates", ex);
}
}
Assert.assertTrue(valid);
return feedResource;
}
@Test
public void testCreateContentWithContentCoProcessors() throws Exception {
WorkspaceFeedResource feedResource = setupContentCoProcessorExecWorkspace();
ClientConfig config = new DefaultClientConfig();
config.getClasses().add(JacksonJsonProvider.class);
config.getClasses().add(TextURIListProvider.class);
config.getClasses().add(FeedProvider.class);
Client client = Client.create(config);
{
final Properties properties = new Properties();
properties.load(getClass().getClassLoader().getResourceAsStream(
"contentcoprocessors/form-value-write.properties"));
Set<Object> formKeys = properties.keySet();
FormDataMultiPart multiPart = new FormDataMultiPart();
for (Object key : formKeys) {
multiPart.field(key.toString(), properties.getProperty(key.toString()));
}
ClientResponse response =
feedResource.getContents().post(MediaType.MULTIPART_FORM_DATA, multiPart,
ClientResponse.Status.CREATED,
ClientResponse.Status.ACCEPTED, ClientResponse.Status.OK);
URI uri = response.getLocation();
ContentResourceImpl resourceImpl = new ContentResourceImpl(feedResource, uri);
final Content lastReadStateOfEntity = resourceImpl.getLastReadStateOfEntity();
Assert.assertNotNull(lastReadStateOfEntity);
Assert.assertNotNull(lastReadStateOfEntity.getFieldsMap().get("directEnumFieldCopy"));
Assert.assertNotNull(lastReadStateOfEntity.getFieldsMap().get("dynaField"));
Assert.assertEquals(lastReadStateOfEntity.getFieldsMap().get("directEnumField").getValue().getValue(),
lastReadStateOfEntity.getFieldsMap().get("directEnumFieldCopy").getValue().getValue());
String dynaField = lastReadStateOfEntity.getFieldsMap().get("dynaField").getValue().getValue();
sleep();
final Content reReadStateOfEntity = client.resource(resourceImpl.getUri()).accept(MediaType.APPLICATION_JSON).
header("Pragma", "no-cache").get(Content.class);
Assert.assertEquals(dynaField, reReadStateOfEntity.getFieldsMap().get("dynaField").getValue().getValue());
}
{
final Properties properties = new Properties();
properties.load(getClass().getClassLoader().getResourceAsStream(
"contentcoprocessors/form-value-read.properties"));
Set<Object> formKeys = properties.keySet();
FormDataMultiPart multiPart = new FormDataMultiPart();
for (Object key : formKeys) {
multiPart.field(key.toString(), properties.getProperty(key.toString()));
}
ClientResponse response =
feedResource.getContents().post(MediaType.MULTIPART_FORM_DATA, multiPart,
ClientResponse.Status.CREATED,
ClientResponse.Status.ACCEPTED, ClientResponse.Status.OK);
URI uri = response.getLocation();
ContentResourceImpl resourceImpl = new ContentResourceImpl(feedResource, uri);
final Content lastReadStateOfEntity = resourceImpl.getLastReadStateOfEntity();
Assert.assertNotNull(lastReadStateOfEntity);
Assert.assertNotNull(lastReadStateOfEntity.getFieldsMap().get("directEnumFieldCopy"));
Assert.assertNotNull(lastReadStateOfEntity.getFieldsMap().get("dynaField"));
Assert.assertEquals(lastReadStateOfEntity.getFieldsMap().get("directEnumField").getValue().getValue(),
lastReadStateOfEntity.getFieldsMap().get("directEnumFieldCopy").getValue().getValue());
String dynaField = lastReadStateOfEntity.getFieldsMap().get("dynaField").getValue().getValue();
sleep();
final Content reReadStateOfEntity = client.resource(resourceImpl.getUri()).accept(MediaType.APPLICATION_JSON).
header("Pragma", "no-cache").get(Content.class);
Assert.assertFalse(dynaField.equals(reReadStateOfEntity.getFieldsMap().get("dynaField").getValue().getValue()));
}
sleep();
}
private WorkspaceFeedResource setupSequenceWorkspace() {
RootResource resource = RootResourceImpl.getRoot(URI.create(ROOT_URI_STRING));
resource.get();
WorkspaceFeedResource feedResource;
try {
feedResource = resource.getTemplates().getWorkspaceResource("test", "sequences");
}
catch (Exception ex) {
feedResource = null;
LOGGER.info("Exception getting feed resoruce", ex);
}
boolean valid = false;
{
try {
final WorkspaceIdImpl workspaceId = new WorkspaceIdImpl("test", "sequences");
if (feedResource == null) {
Workspace workspace = resource.createWorkspace(workspaceId);
feedResource = resource.getTemplates().getWorkspaceResource(workspace.getId().getGlobalNamespace(),
workspace.getId().getName());
}
valid = true;
}
catch (Exception ex) {
LOGGER.error("Error creating test workspace for templates", ex);
}
}
Assert.assertTrue(valid);
return feedResource;
}
@Test
public void testCreateSequences() {
LOGGER.info("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Create Sequence %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
WorkspaceFeedResource resource = setupSequenceWorkspace();
final WorkspaceAPI workspaceApi = SmartContentAPI.getInstance().getWorkspaceApi();
com.smartitengineering.cms.api.workspace.Workspace workspace = workspaceApi.createWorkspaceId(resource.
getWorkspaceNamespace(), resource.getWorkspaceName()).getWorkspace();
Sequence sequence = workspaceApi.putSequence(workspace.getId(), TEST, PORT);
Assert.assertNotNull(sequence);
Assert.assertEquals(workspace.getId(), sequence.getWorkspace());
Assert.assertEquals(TEST, sequence.getName());
Assert.assertEquals(PORT, sequence.getCurrentValue());
sleep();
}
@Test
public void testGetSequence() {
LOGGER.info("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Get Sequence %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
WorkspaceFeedResource resource = setupSequenceWorkspace();
final WorkspaceAPI workspaceApi = SmartContentAPI.getInstance().getWorkspaceApi();
com.smartitengineering.cms.api.workspace.Workspace workspace = workspaceApi.createWorkspaceId(resource.
getWorkspaceNamespace(), resource.getWorkspaceName()).getWorkspace();
Sequence sequence = workspaceApi.getSequence(workspace.getId(), TEST);
Assert.assertNotNull(sequence);
Assert.assertEquals(workspace.getId(), sequence.getWorkspace());
Assert.assertEquals(TEST, sequence.getName());
Assert.assertEquals(PORT, sequence.getCurrentValue());
Collection<Sequence> sequences = workspaceApi.getSequencesForWorkspace(workspace.getId());
Assert.assertNotNull(sequences);
Assert.assertEquals(1, sequences.size());
sequence = sequences.iterator().next();
Assert.assertNotNull(sequence);
Assert.assertEquals(workspace.getId(), sequence.getWorkspace());
Assert.assertEquals(TEST, sequence.getName());
Assert.assertEquals(PORT, sequence.getCurrentValue());
sleep();
}
@Test
public void testBasicSequenceModifications() {
LOGGER.info("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Basic Modify Sequence %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
WorkspaceFeedResource resource = setupSequenceWorkspace();
final WorkspaceAPI workspaceApi = SmartContentAPI.getInstance().getWorkspaceApi();
com.smartitengineering.cms.api.workspace.Workspace workspace = workspaceApi.createWorkspaceId(resource.
getWorkspaceNamespace(), resource.getWorkspaceName()).getWorkspace();
Sequence sequence = workspaceApi.getSequence(workspace.getId(), TEST);
long newVal = workspaceApi.modifySequenceValue(sequence, 1);
Assert.assertEquals(PORT + 1, newVal);
newVal = workspaceApi.modifySequenceValue(sequence, -2);
Assert.assertEquals(PORT - 1, newVal);
newVal = workspaceApi.modifySequenceValue(sequence, 1);
Assert.assertEquals(PORT, newVal);
sleep();
}
@Test
public void testSingleJVMMultiThreadedSequenceModifications() {
LOGGER.info("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Multithread modify Sequence %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
WorkspaceFeedResource resource = setupSequenceWorkspace();
final WorkspaceAPI workspaceApi = SmartContentAPI.getInstance().getWorkspaceApi();
com.smartitengineering.cms.api.workspace.Workspace workspace = workspaceApi.createWorkspaceId(resource.
getWorkspaceNamespace(), resource.getWorkspaceName()).getWorkspace();
final Sequence sequence = workspaceApi.getSequence(workspace.getId(), TEST);
final ConcurrentHashSet<Long> vals = new ConcurrentHashSet<Long>();
Runnable runnable = new Runnable() {
public void run() {
for (int i = 0; i < 100; ++i) {
long newVal = workspaceApi.modifySequenceValue(sequence, 1);
Assert.assertTrue(vals.add(newVal));
}
}
};
long start = System.currentTimeMillis();
Collection<Thread> threads = new ArrayList<Thread>();
for (int i = 0; i < 10; ++i) {
Thread thread = new Thread(runnable);
thread.start();
threads.add(thread);
}
try {
for (Thread thread : threads) {
thread.join();
}
}
catch (Exception ex) {
LOGGER.error("Could wait for thread to end!", ex);
throw new IllegalArgumentException(ex);
}
long end = System.currentTimeMillis();
sleep();
Sequence lsequence = workspaceApi.getSequence(workspace.getId(), TEST);
Assert.assertEquals(PORT + 1000, lsequence.getCurrentValue());
LOGGER.info("Duration for 1000 increments " + (end - start) + "ms");
}
@Test
public void testDeleteSequence() {
LOGGER.info("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Delete Sequence %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
WorkspaceFeedResource resource = setupSequenceWorkspace();
final WorkspaceAPI workspaceApi = SmartContentAPI.getInstance().getWorkspaceApi();
com.smartitengineering.cms.api.workspace.Workspace workspace = workspaceApi.createWorkspaceId(resource.
getWorkspaceNamespace(), resource.getWorkspaceName()).getWorkspace();
Sequence sequence = workspaceApi.getSequence(workspace.getId(), TEST);
Assert.assertNotNull(sequence);
workspaceApi.deleteSequence(workspace.getId(), TEST);
sequence = workspaceApi.getSequence(workspace.getId(), TEST);
Assert.assertNull(sequence);
sleep();
Collection<Sequence> sequences = workspaceApi.getSequencesForWorkspace(workspace.getId());
Assert.assertNotNull(sequences);
Assert.assertEquals(0, sequences.size());
}
@Test
public void testCreateSequencesViaWebService() {
WorkspaceFeedResource resource = setupSequenceWorkspace();
final WorkspaceSequencesResource sequences = resource.getSequences();
Assert.assertNotNull(sequences);
sequences.createSequence(TEST, PORT);
sleep();
sequences.get();
Collection<WorkspaceSequenceResource> seqs = sequences.getSequences();
Assert.assertEquals(1, seqs.size());
WorkspaceSequenceResource seq = sequences.getSequenceByName(TEST);
Assert.assertEquals(TEST, seq.getName());
Assert.assertEquals(PORT, seq.getCurrentValue());
}
@Test
public void testUpdateSequenceViaWebService() {
WorkspaceFeedResource resource = setupSequenceWorkspace();
final WorkspaceSequencesResource sequences = resource.getSequences();
Assert.assertNotNull(sequences);
WorkspaceSequenceResource seq = sequences.getSequenceByName(TEST);
Assert.assertNotNull(seq);
long newVal = seq.update(1);
Assert.assertEquals(TEST, seq.getName());
Assert.assertEquals(PORT + 1, newVal);
sleep();
}
@Test
public void testDeleteSequenceViaWebService() {
WorkspaceFeedResource resource = setupSequenceWorkspace();
final WorkspaceSequencesResource sequences = resource.getSequences();
Assert.assertNotNull(sequences);
WorkspaceSequenceResource seq = sequences.getSequenceByName(TEST);
Assert.assertNotNull(seq);
seq.delete(ClientResponse.Status.ACCEPTED);
try {
seq = sequences.getSequenceByName(TEST);
}
catch (Exception ex) {
//Expected
}
sleep();
}
@Test
public void testDeleteWorkspace() {
LOGGER.info("::::::::::::::::::::: TEST DELETE WORKSPACE ::::::::::::::::::::::");
final String WSForDeleteWith300plusContent = "wsfordeletewith350content";
final String WSForDeleteWith90Content = "wsfordeletewith90content";
final String WSForDeleteWithNoContent = "wsfordeletewithnocontent";
// create a workspace for delete
WorkspaceId workspaceForDeleteWith300PlusContentId = SmartContentAPI.getInstance().getWorkspaceApi().createWorkspace(
WSForDeleteWith300plusContent);
ResultScanner rs = null;
//SmartContentAPI.getInstance().getWorkspaceApi().createWorkspace(workspaceForDeleteId);
com.smartitengineering.cms.api.workspace.Workspace workSpaceForDeleteWith300PlusContent = SmartContentAPI.
getInstance().
getWorkspaceApi().getWorkspace(workspaceForDeleteWith300PlusContentId);
Assert.assertNotNull(workSpaceForDeleteWith300PlusContent);
// create content type
InputStream stream = getClass().getClassLoader().getResourceAsStream("content-type-for-delete.xml");
try {
final ContentTypeLoader contentTypeLoader = SmartContentAPI.getInstance().getContentTypeLoader();
final Collection<WritableContentType> types;
types = contentTypeLoader.parseContentTypes(workSpaceForDeleteWith300PlusContent.getId(), stream,
com.smartitengineering.cms.api.common.MediaType.APPLICATION_XML);
for (WritableContentType type : types) {
type.put();
}
stream.close();
}
catch (Exception ex) {
LOGGER.info("Can not create ContentType for delete", ex);
Assert.fail();
}
ContentTypeId contentTypeId = SmartContentAPI.getInstance().getContentTypeLoader().createContentTypeId(
workspaceForDeleteWith300PlusContentId, "com.smartitengineering.smart-shopping.content", "ContentTypeForDelete");
ContentType contentType = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(contentTypeId);
Assert.assertNotNull(contentType);
// create content
String statusKey = contentType.getStatuses().keySet().iterator().next();
ContentStatus contentStatus = contentType.getStatuses().get(statusKey);
for (int i = 0; i < 350; i++) {
MutableContent mutableContent = SmartContentAPI.getInstance().getContentLoader().createContent(contentType);
mutableContent.setContentDefinition(contentType);
mutableContent.setPrivate(false);
mutableContent.setStatus(contentStatus);
MutableField mutableField = new com.smartitengineering.cms.api.impl.content.FieldImpl();
mutableField.setName("name");
MutableFieldValue<String> mutableFieldValue =
new com.smartitengineering.cms.api.impl.content.FieldValueImpl<String>();
mutableFieldValue.setValue("russel");
mutableField.setValue(mutableFieldValue);
mutableContent.setField(mutableField);
//Create new content
WriteableContent writeableContent = SmartContentAPI.getInstance().getContentLoader().getWritableContent(
mutableContent);
writeableContent.createContentId(workspaceForDeleteWith300PlusContentId);
try {
//Save or update the content, will be decided by writeable content implementation
writeableContent.put();
}
catch (IOException ex) {
LOGGER.error(ex.getMessage(), ex);
Assert.fail();
}
}
sleep();
SmartContentAPI.getInstance().getWorkspaceApi().deleteWorkspace(workspaceForDeleteWith300PlusContentId);
sleep();
try {
Thread.sleep(50000);
}
catch (Exception ex) {
}
com.smartitengineering.cms.api.workspace.Workspace fetchedWorkspace = SmartContentAPI.getInstance().
getWorkspaceApi().
getWorkspace(workspaceForDeleteWith300PlusContentId);
if (fetchedWorkspace == null) {
LOGGER.info("Fetched workspace null");
}
Assert.assertNull(fetchedWorkspace);
contentType = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(contentTypeId);
Assert.assertNull(contentType);
// test contents exists or not
try {
HTable table = new HTable(TEST_UTIL.getConfiguration(), "cms_content");
Scan s = new Scan();
s.addColumn(Bytes.toBytes("self"), Bytes.toBytes("contentType"));
rs = table.getScanner(s);
LOGGER.info("WorkspaceForDelete Id: " + workspaceForDeleteWith300PlusContentId.toString());
for (Result rr = rs.next(); rr != null; rr = rs.next()) {
String rowId = Bytes.toString(rr.getRow());
if (rowId.contains(workspaceForDeleteWith300PlusContentId.toString())) {
LOGGER.info(rowId);
Assert.fail();
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
finally {
rs.close();
}
// test fields exists or not
try {
HTable table = new HTable(TEST_UTIL.getConfiguration(), "cms_fields");
Scan s = new Scan();
s.addColumn(Bytes.toBytes("self"), Bytes.toBytes("id"));
rs = table.getScanner(s);
LOGGER.info("WorkspaceForDelete Id: " + workspaceForDeleteWith300PlusContentId.toString());
for (Result rr = rs.next(); rr != null; rr = rs.next()) {
String rowId = Bytes.toString(rr.getRow());
LOGGER.info("Fields: " + rowId);
if (rowId.contains(workspaceForDeleteWith300PlusContentId.toString())) {
LOGGER.info(rowId);
Assert.fail();
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
finally {
rs.close();
}
final WriteableContent writeableContentForDeleteTest;
MutableContent mutableContent = SmartContentAPI.getInstance().getContentLoader().createContent(contentType);
mutableContent.setContentDefinition(contentType);
mutableContent.setPrivate(false);
mutableContent.setStatus(contentStatus);
MutableField mutableField = new com.smartitengineering.cms.api.impl.content.FieldImpl();
mutableField.setName("name");
MutableFieldValue<String> mutableFieldValue =
new com.smartitengineering.cms.api.impl.content.FieldValueImpl<String>();
mutableFieldValue.setValue("russel");
mutableField.setValue(mutableFieldValue);
mutableContent.setField(mutableField);
//Create new content
writeableContentForDeleteTest =
SmartContentAPI.getInstance().getContentLoader().getWritableContent(mutableContent);
writeableContentForDeleteTest.createContentId(workspaceForDeleteWith300PlusContentId);
try {
//Save or update the content, will be decided by writeable content implementation
writeableContentForDeleteTest.put();
Assert.fail();
}
catch (IOException ex) {
LOGGER.info("should fail");
}
// workspace with less than 100 content
WorkspaceId workspaceForDeleteWith90ContentId = SmartContentAPI.getInstance().getWorkspaceApi().createWorkspace(
WSForDeleteWith90Content);
com.smartitengineering.cms.api.workspace.Workspace workSpaceForDeleteWith90Content = SmartContentAPI.getInstance().
getWorkspaceApi().getWorkspace(workspaceForDeleteWith90ContentId);
Assert.assertNotNull(workSpaceForDeleteWith90Content);
stream = getClass().getClassLoader().getResourceAsStream("content-type-for-delete.xml");
try {
final ContentTypeLoader contentTypeLoader = SmartContentAPI.getInstance().getContentTypeLoader();
final Collection<WritableContentType> types;
types = contentTypeLoader.parseContentTypes(workSpaceForDeleteWith90Content.getId(), stream,
com.smartitengineering.cms.api.common.MediaType.APPLICATION_XML);
for (WritableContentType type : types) {
type.put();
}
}
catch (Exception ex) {
LOGGER.info("Can not create ContentType for delete", ex);
Assert.fail();
}
contentTypeId = SmartContentAPI.getInstance().getContentTypeLoader().createContentTypeId(
workspaceForDeleteWith90ContentId, "com.smartitengineering.smart-shopping.content", "ContentTypeForDelete");
Assert.assertNotNull(contentTypeId);
contentType = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(contentTypeId);
Assert.assertNotNull(contentType);
for (int i = 0; i < 90; i++) {
mutableContent = SmartContentAPI.getInstance().getContentLoader().createContent(contentType);
mutableContent.setContentDefinition(contentType);
mutableContent.setPrivate(false);
mutableContent.setStatus(contentStatus);
mutableField = new com.smartitengineering.cms.api.impl.content.FieldImpl();
mutableField.setName("name");
mutableFieldValue = new com.smartitengineering.cms.api.impl.content.FieldValueImpl<String>();
mutableFieldValue.setValue("russel");
mutableField.setValue(mutableFieldValue);
mutableContent.setField(mutableField);
//Create new content
WriteableContent writeableContent = SmartContentAPI.getInstance().getContentLoader().getWritableContent(
mutableContent);
writeableContent.createContentId(workspaceForDeleteWith90ContentId);
try {
//Save or update the content, will be decided by writeable content implementation
writeableContent.put();
}
catch (IOException ex) {
LOGGER.error(ex.getMessage(), ex);
Assert.fail();
}
}
sleep();
SmartContentAPI.getInstance().getWorkspaceApi().deleteWorkspace(workspaceForDeleteWith90ContentId);
sleep();
try {
Thread.sleep(50000);
}
catch (Exception ex) {
}
fetchedWorkspace = SmartContentAPI.getInstance().
getWorkspaceApi().
getWorkspace(workspaceForDeleteWith90ContentId);
if (fetchedWorkspace == null) {
LOGGER.info("Fetched workspace null");
}
Assert.assertNull(fetchedWorkspace);
contentType = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(contentTypeId);
Assert.assertNull(contentType);
// test contents exists or not
try {
HTable table = new HTable(TEST_UTIL.getConfiguration(), "cms_content");
Scan s = new Scan();
s.addColumn(Bytes.toBytes("self"), Bytes.toBytes("contentType"));
rs = table.getScanner(s);
LOGGER.info("WorkspaceForDelete Id: " + workspaceForDeleteWith90ContentId.toString());
for (Result rr = rs.next(); rr != null; rr = rs.next()) {
String rowId = Bytes.toString(rr.getRow());
if (rowId.contains(workspaceForDeleteWith90ContentId.toString())) {
LOGGER.info(rowId);
Assert.fail();
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
finally {
rs.close();
}
// test fields exists or not
try {
HTable table = new HTable(TEST_UTIL.getConfiguration(), "cms_fields");
Scan s = new Scan();
s.addColumn(Bytes.toBytes("self"), Bytes.toBytes("id"));
rs = table.getScanner(s);
LOGGER.info("WorkspaceForDelete Id: " + workspaceForDeleteWith90ContentId.toString());
for (Result rr = rs.next(); rr != null; rr = rs.next()) {
String rowId = Bytes.toString(rr.getRow());
LOGGER.info("Fields: " + rowId);
if (rowId.contains(workspaceForDeleteWith90ContentId.toString())) {
LOGGER.info(rowId);
Assert.fail();
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
finally {
rs.close();
}
// workspace with no content
WorkspaceId workspaceForDeleteWithNoContentId = SmartContentAPI.getInstance().getWorkspaceApi().createWorkspace(
WSForDeleteWithNoContent);
com.smartitengineering.cms.api.workspace.Workspace workSpaceForDeleteWithNoContent = SmartContentAPI.getInstance().
getWorkspaceApi().getWorkspace(workspaceForDeleteWithNoContentId);
Assert.assertNotNull(workSpaceForDeleteWithNoContent);
SmartContentAPI.getInstance().getWorkspaceApi().deleteWorkspace(workspaceForDeleteWithNoContentId);
sleep();
fetchedWorkspace = SmartContentAPI.getInstance().
getWorkspaceApi().
getWorkspace(workspaceForDeleteWithNoContentId);
if (fetchedWorkspace == null) {
LOGGER.info("Fetched workspace null");
}
Assert.assertNull(fetchedWorkspace);
}
@Test
public void testDeleteWorkspaceViaWebservice() {
LOGGER.info("::::::::::::::::::::: TEST DELETE WORKSPACE FROM WEBSERVICE ::::::::::::::::::::::");
final String WSForDeleteWith300plusContent = "wsfordeletewith350content";
WorkspaceIdImpl workspaceId = new WorkspaceIdImpl();
workspaceId.setName(WSForDeleteWith300plusContent);
workspaceId.setGlobalNamespace(WSForDeleteWith300plusContent);
WorkspaceContentResouce workspaceContentResourceForDelete = null;
try {
RootResource resource = RootResourceImpl.getRoot(new URI(ROOT_URI_STRING));
int size = resource.getWorkspaces().size();
Workspace workspace = resource.createWorkspace(workspaceId);
Assert.assertNotNull(workspace);
resource.get();
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Workspace size: " + resource.getWorkspaces().size());
}
for (WorkspaceContentResouce workspaceContentResource : resource.getWorkspaces()) {
if (workspaceContentResource.get().getId().getName().equals(WSForDeleteWith300plusContent)) {
workspaceContentResourceForDelete = workspaceContentResource;
}
}
}
catch (Exception ex) {
LOGGER.error(ex.getMessage(), ex);
}
ResultScanner rs = null;
com.smartitengineering.cms.api.impl.workspace.WorkspaceIdImpl workspaceForDeleteWith300PlusContentId =
new com.smartitengineering.cms.api.impl.workspace.WorkspaceIdImpl();
workspaceForDeleteWith300PlusContentId.setName(WSForDeleteWith300plusContent);
workspaceForDeleteWith300PlusContentId.setGlobalNamespace(WSForDeleteWith300plusContent);
com.smartitengineering.cms.api.workspace.Workspace workSpaceForDeleteWith300PlusContent = SmartContentAPI.
getInstance().getWorkspaceApi().getWorkspace(workspaceForDeleteWith300PlusContentId);
Assert.assertNotNull(workSpaceForDeleteWith300PlusContent);
// create content type
InputStream stream = getClass().getClassLoader().getResourceAsStream("content-type-for-delete.xml");
try {
final ContentTypeLoader contentTypeLoader = SmartContentAPI.getInstance().getContentTypeLoader();
final Collection<WritableContentType> types;
types = contentTypeLoader.parseContentTypes(workSpaceForDeleteWith300PlusContent.getId(), stream,
com.smartitengineering.cms.api.common.MediaType.APPLICATION_XML);
for (WritableContentType type : types) {
type.put();
}
stream.close();
}
catch (Exception ex) {
LOGGER.info("Can not create ContentType for delete", ex);
Assert.fail();
}
ContentTypeId contentTypeId = SmartContentAPI.getInstance().getContentTypeLoader().createContentTypeId(
workspaceForDeleteWith300PlusContentId, "com.smartitengineering.smart-shopping.content", "ContentTypeForDelete");
ContentType contentType = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(contentTypeId);
Assert.assertNotNull(contentType);
// create content
String statusKey = contentType.getStatuses().keySet().iterator().next();
ContentStatus contentStatus = contentType.getStatuses().get(statusKey);
for (int i = 0; i < 350; i++) {
MutableContent mutableContent = SmartContentAPI.getInstance().getContentLoader().createContent(contentType);
mutableContent.setContentDefinition(contentType);
mutableContent.setPrivate(false);
mutableContent.setStatus(contentStatus);
MutableField mutableField = new com.smartitengineering.cms.api.impl.content.FieldImpl();
mutableField.setName("name");
MutableFieldValue<String> mutableFieldValue =
new com.smartitengineering.cms.api.impl.content.FieldValueImpl<String>();
mutableFieldValue.setValue("russel");
mutableField.setValue(mutableFieldValue);
mutableContent.setField(mutableField);
//Create new content
WriteableContent writeableContent = SmartContentAPI.getInstance().getContentLoader().getWritableContent(
mutableContent);
writeableContent.createContentId(workspaceForDeleteWith300PlusContentId);
try {
//Save or update the content, will be decided by writeable content implementation
writeableContent.put();
}
catch (IOException ex) {
LOGGER.error(ex.getMessage(), ex);
Assert.fail();
}
}
sleep();
// delete workspace via web service
LOGGER.info("");
workspaceContentResourceForDelete.delete();
sleep();
try {
Thread.sleep(50000);
}
catch (Exception ex) {
}
com.smartitengineering.cms.api.workspace.Workspace fetchedWorkspace = SmartContentAPI.getInstance().
getWorkspaceApi().
getWorkspace(workspaceForDeleteWith300PlusContentId);
if (fetchedWorkspace == null) {
LOGGER.info("Fetched workspace null");
}
Assert.assertNull(fetchedWorkspace);
contentType = SmartContentAPI.getInstance().getContentTypeLoader().loadContentType(contentTypeId);
Assert.assertNull(contentType);
// test contents exists or not
try {
HTable table = new HTable(TEST_UTIL.getConfiguration(), "cms_content");
Scan s = new Scan();
s.addColumn(Bytes.toBytes("self"), Bytes.toBytes("contentType"));
rs = table.getScanner(s);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("WorkspaceForDelete Id: " + workspaceForDeleteWith300PlusContentId.toString());
}
for (Result rr = rs.next(); rr != null; rr = rs.next()) {
String rowId = Bytes.toString(rr.getRow());
if (rowId.contains(workspaceForDeleteWith300PlusContentId.toString())) {
LOGGER.info(rowId);
Assert.fail();
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
finally {
rs.close();
}
// test fields exists or not
try {
HTable table = new HTable(TEST_UTIL.getConfiguration(), "cms_fields");
Scan s = new Scan();
s.addColumn(Bytes.toBytes("self"), Bytes.toBytes("id"));
rs = table.getScanner(s);
LOGGER.info("WorkspaceForDelete Id: " + workspaceForDeleteWith300PlusContentId.toString());
for (Result rr = rs.next(); rr != null; rr = rs.next()) {
String rowId = Bytes.toString(rr.getRow());
LOGGER.info("Fields: " + rowId);
if (rowId.contains(workspaceForDeleteWith300PlusContentId.toString())) {
LOGGER.info(rowId);
Assert.fail();
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}
finally {
rs.close();
}
final WriteableContent writeableContentForDeleteTest;
MutableContent mutableContent = SmartContentAPI.getInstance().getContentLoader().createContent(contentType);
mutableContent.setContentDefinition(contentType);
mutableContent.setPrivate(false);
mutableContent.setStatus(contentStatus);
MutableField mutableField = new com.smartitengineering.cms.api.impl.content.FieldImpl();
mutableField.setName("name");
MutableFieldValue<String> mutableFieldValue =
new com.smartitengineering.cms.api.impl.content.FieldValueImpl<String>();
mutableFieldValue.setValue("russel");
mutableField.setValue(mutableFieldValue);
mutableContent.setField(mutableField);
//Create new content
writeableContentForDeleteTest =
SmartContentAPI.getInstance().getContentLoader().getWritableContent(mutableContent);
writeableContentForDeleteTest.createContentId(workspaceForDeleteWith300PlusContentId);
try {
//Save or update the content, will be decided by writeable content implementation
writeableContentForDeleteTest.put();
Assert.fail();
}
catch (IOException ex) {
LOGGER.info("should fail");
}
}
protected void sleep() {
try {
Thread.sleep(SLEEP_DURATION);
}
catch (Exception ex) {
LOGGER.error("Error sleeping", ex);
}
}
public static class ConfigurationModule extends AbstractModule {
@Override
protected void configure() {
bind(Configuration.class).toInstance(TEST_UTIL.getConfiguration());
ConnectionConfig config = new ConnectionConfig();
config.setBasicUri("");
config.setContextPath("/");
config.setHost("localhost");
config.setPort(PORT);
bind(ConnectionConfig.class).toInstance(config);
}
}
}