You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2012/02/07 20:26:18 UTC
svn commit: r1241563 [2/2] - in
/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src:
main/java/org/apache/chemistry/opencmis/util/content/
main/java/org/apache/chemistry/opencmis/util/content/fractal/
main/java/org/apache...
Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/MultiThreadedObjectGenerator.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/MultiThreadedObjectGenerator.java?rev=1241563&r1=1241562&r2=1241563&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/MultiThreadedObjectGenerator.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/MultiThreadedObjectGenerator.java Tue Feb 7 19:26:17 2012
@@ -25,6 +25,7 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.spi.NavigationService;
import org.apache.chemistry.opencmis.commons.spi.ObjectService;
import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
+import org.apache.chemistry.opencmis.util.repository.ObjectGenerator.CONTENT_KIND;
public class MultiThreadedObjectGenerator {
@@ -86,14 +87,14 @@ public class MultiThreadedObjectGenerato
private static ObjectGenerator createObjectGenerator(CmisBinding binding, String repoId, int docsPerFolder,
int foldersPerFolders, int depth, String documentType, String folderType, int contentSizeInKB,
- String rootFolderId, boolean doCleanup) {
+ String rootFolderId, CONTENT_KIND contentKind, boolean doCleanup) {
BindingsObjectFactory objectFactory = binding.getObjectFactory();
NavigationService navSvc = binding.getNavigationService();
ObjectService objSvc = binding.getObjectService();
RepositoryService repSvc = binding.getRepositoryService();
- ObjectGenerator gen = new ObjectGenerator(objectFactory, navSvc, objSvc, repSvc, repoId);
+ ObjectGenerator gen = new ObjectGenerator(objectFactory, navSvc, objSvc, repSvc, repoId, contentKind);
gen.setUseUuidsForNames(true);
gen.setNumberOfDocumentsToCreatePerFolder(docsPerFolder);
// Set the type id for all created documents:
@@ -120,10 +121,10 @@ public class MultiThreadedObjectGenerato
public static ObjectGeneratorRunner prepareForCreateTree(CmisBinding binding, String repoId, int docsPerFolder,
int foldersPerFolders, int depth, String documentType, String folderType, int contentSizeInKB,
- String rootFolderId, boolean doCleanup) {
+ String rootFolderId, CONTENT_KIND contentKind, boolean doCleanup) {
ObjectGenerator objGen = createObjectGenerator(binding, repoId, docsPerFolder, foldersPerFolders, depth,
- documentType, folderType, contentSizeInKB, rootFolderId, doCleanup);
+ documentType, folderType, contentSizeInKB, rootFolderId, contentKind, doCleanup);
ObjectGeneratorRunner gen = new ObjectGeneratorRunner(objGen, Action.CreateTree);
gen.fFoldersPerFolders = foldersPerFolders;
@@ -134,12 +135,13 @@ public class MultiThreadedObjectGenerato
public static ObjectGeneratorRunner[] prepareForCreateTreeMT(CmisBinding provider, String repoId,
int docsPerFolder, int foldersPerFolders, int depth, String documentType, String folderType,
- int contentSizeInKB, String[] rootFolderIds, boolean doCleanup) {
+ int contentSizeInKB, String[] rootFolderIds, CONTENT_KIND contentKind, boolean doCleanup) {
ObjectGeneratorRunner[] runners = new ObjectGeneratorRunner[rootFolderIds.length];
for (int i = 0; i < rootFolderIds.length; i++) {
ObjectGenerator objGen = createObjectGenerator(provider, repoId, docsPerFolder, foldersPerFolders, depth,
- documentType, folderType, contentSizeInKB, rootFolderIds[i], doCleanup);
+ documentType, folderType, contentSizeInKB, rootFolderIds[i], contentKind,
+ doCleanup);
ObjectGeneratorRunner gen = new ObjectGeneratorRunner(objGen, Action.CreateTree);
gen.fFoldersPerFolders = foldersPerFolders;
@@ -151,10 +153,11 @@ public class MultiThreadedObjectGenerato
}
public static ObjectGeneratorRunner prepareForCreateDocument(CmisBinding provider, String repoId,
- String documentType, int contentSizeInKB, String rootFolderId, int noDocuments, boolean doCleanup) {
+ String documentType, int contentSizeInKB, String rootFolderId, int noDocuments,
+ CONTENT_KIND contentKind, boolean doCleanup) {
ObjectGenerator objGen = createObjectGenerator(provider, repoId, 0, 0, 0, documentType, null, contentSizeInKB,
- rootFolderId, doCleanup);
+ rootFolderId, contentKind, doCleanup);
ObjectGeneratorRunner gen = new ObjectGeneratorRunner(objGen, Action.CreateDocument);
gen.fRootFolderId = getRootFolderId(provider, repoId, rootFolderId);
@@ -164,12 +167,12 @@ public class MultiThreadedObjectGenerato
public static ObjectGeneratorRunner[] prepareForCreateDocumentMT(int threadCount, CmisBinding binding,
String repoId, String documentType, int contentSizeInKB, String rootFolderId, int noDocuments,
- boolean doCleanup) {
+ CONTENT_KIND contentKind, boolean doCleanup) {
ObjectGeneratorRunner[] runners = new ObjectGeneratorRunner[threadCount];
for (int i = 0; i < threadCount; i++) {
ObjectGenerator objGen = createObjectGenerator(binding, repoId, 0, 0, 0, documentType, null,
- contentSizeInKB, rootFolderId, doCleanup);
+ contentSizeInKB, rootFolderId, contentKind, doCleanup);
ObjectGeneratorRunner gen = new ObjectGeneratorRunner(objGen, Action.CreateDocument);
gen.fRootFolderId = getRootFolderId(binding, repoId, rootFolderId);
@@ -183,7 +186,7 @@ public class MultiThreadedObjectGenerato
String rootFolderId, int noFolders, boolean doCleanup) {
ObjectGenerator objGen = createObjectGenerator(provider, repoId, 0, 0, 0, null, folderType, 0, rootFolderId,
- doCleanup);
+ null, doCleanup);
ObjectGeneratorRunner gen = new ObjectGeneratorRunner(objGen, Action.CreateFolders);
gen.fRootFolderId = getRootFolderId(provider, repoId, rootFolderId);
@@ -197,7 +200,7 @@ public class MultiThreadedObjectGenerato
ObjectGeneratorRunner[] runners = new ObjectGeneratorRunner[threadCount];
for (int i = 0; i < threadCount; i++) {
ObjectGenerator objGen = createObjectGenerator(binding, repoId, 0, 0, 0, null, folderType, 0, rootFolderId,
- doCleanup);
+ null, doCleanup);
ObjectGeneratorRunner gen = new ObjectGeneratorRunner(objGen, Action.CreateFolders);
gen.fRootFolderId = getRootFolderId(binding, repoId, rootFolderId);
@@ -210,7 +213,7 @@ public class MultiThreadedObjectGenerato
public static ObjectGeneratorRunner prepareForCreateTypes(CmisBinding provider, String repoId, TypeDefinitionList typeDefList) {
ObjectGenerator objGen = createObjectGenerator(provider, repoId, 0, 0, 0, null, null, 0, null,
- false);
+ null, false);
ObjectGeneratorRunner gen = new ObjectGeneratorRunner(objGen, Action.CreateTypes);
gen.fTypeDefList = typeDefList;
Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/ObjGenApp.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/ObjGenApp.java?rev=1241563&r1=1241562&r2=1241563&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/ObjGenApp.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/ObjGenApp.java Tue Feb 7 19:26:17 2012
@@ -19,7 +19,6 @@
package org.apache.chemistry.opencmis.util.repository;
import java.io.BufferedReader;
-import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -28,9 +27,6 @@ import java.net.URL;
import java.util.HashMap;
import java.util.Map;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.Unmarshaller;
-
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
@@ -38,16 +34,11 @@ import joptsimple.OptionSpec;
import org.apache.chemistry.opencmis.client.bindings.CmisBindingFactory;
import org.apache.chemistry.opencmis.commons.SessionParameter;
import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionList;
import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
import org.apache.chemistry.opencmis.commons.exceptions.CmisBaseException;
-import org.apache.chemistry.opencmis.commons.impl.Converter;
-import org.apache.chemistry.opencmis.commons.impl.JaxBHelper;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionListType;
-import org.apache.chemistry.opencmis.commons.impl.jaxb.CmisTypeDefinitionType;
import org.apache.chemistry.opencmis.commons.spi.CmisBinding;
import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
+import org.apache.chemistry.opencmis.util.repository.ObjectGenerator.CONTENT_KIND;
public class ObjGenApp {
@@ -72,6 +63,7 @@ public class ObjGenApp {
private static final String CLEANUP = "Cleanup";
private static final String ROOTFOLDER = "RootFolder";
private static final String THREADS = "Threads";
+ private static final String CONTENT_KIND = "ContentKind";
// private static final String FILE = "File";
private static final String BINDING_ATOM = "AtomPub";
@@ -80,6 +72,7 @@ public class ObjGenApp {
private CmisBinding binding;
private boolean fUsingAtom;
private String fUrlStr;
+ private CONTENT_KIND fContentKind;
OptionSpec<String> fCmd;
OptionSpec<Integer> fDepth;
@@ -95,6 +88,7 @@ public class ObjGenApp {
OptionSpec<String> fRootFolder;
OptionSpec<Integer> fThreads;
OptionSpec<String> fFileName;
+ OptionSpec<String> fContentKindStr;
public static void main(String[] args) {
@@ -139,7 +133,9 @@ public class ObjGenApp {
fThreads = parser.accepts(THREADS).withOptionalArg().ofType(Integer.class).defaultsTo(1).describedAs(
"Number of threads to start in parallel");
// fFileName = parser.accepts(FILE).withRequiredArg().ofType(String.class).describedAs("Input File");
-
+ fContentKindStr = parser.accepts(CONTENT_KIND).withOptionalArg().ofType(String.class).defaultsTo("lorem/text")
+ .describedAs("kind of content: static/text, lorem/text, lorem/html, fractal/jpeg");
+
OptionSet options = parser.parse(args);
if (options.valueOf(fCmd) == null || options.has("?")) {
@@ -156,6 +152,26 @@ public class ObjGenApp {
return;
}
+ String kind = options.valueOf(fContentKindStr);
+ if (null == kind) {
+ if (options.valueOf(fContentSize) > 0)
+ fContentKind = ObjectGenerator.CONTENT_KIND.StaticText;
+ else
+ fContentKind = null;
+ } if (kind.equals("static/text"))
+ fContentKind = ObjectGenerator.CONTENT_KIND.StaticText;
+ else if (kind.equals("lorem/text"))
+ fContentKind = ObjectGenerator.CONTENT_KIND.LoremIpsumText;
+ else if (kind.equals("lorem/html"))
+ fContentKind = ObjectGenerator.CONTENT_KIND.LoremIpsumHtml;
+ else if (kind.equals("fractal/jpeg"))
+ fContentKind = ObjectGenerator.CONTENT_KIND.ImageFractalJpeg;
+ else {
+ System.out.println("Unknown content kind: " + options.valueOf(fContentKindStr));
+ System.out.println(" must be one of static/text, lorem/text, lorem/html, fractal/jpeg");
+ usage(parser);
+ }
+
if (options.valueOf(fCmd).equals("FillRepository")) {
fillRepository(options);
} else if (options.valueOf(fCmd).equals("CreateDocument")) {
@@ -204,7 +220,7 @@ public class ObjGenApp {
+ PROP_ATOMPUB_URL
+ "=http://localhost:8080/opencmis/atom -cp ... "
+ "org.apache.chemistry.opencmis.util.repository.ObjGenApp --Binding=AtomPub --Command=CreateDocument "
- + "--RepositoryId=A1 --ContentSizeInKB=25");
+ + "--RepositoryId=A1 --ContentSizeInKB=25 --ContentKind=lorem/text");
return;
} catch (IOException e) {
e.printStackTrace();
@@ -216,7 +232,7 @@ public class ObjGenApp {
MultiThreadedObjectGenerator.ObjectGeneratorRunner runner = MultiThreadedObjectGenerator.prepareForCreateTree(
getBinding(), repoId, docsPerFolder, foldersPerFolders, depth, documentType, folderType,
- contentSizeInKB, rootFolderId, doCleanup);
+ contentSizeInKB, rootFolderId, fContentKind, doCleanup);
ObjectGenerator gen = runner.getObjectGenerator();
runner.doCreateTree();
@@ -240,7 +256,7 @@ public class ObjGenApp {
// Step 2: fill each root folder with an object tree
MultiThreadedObjectGenerator.ObjectGeneratorRunner[] runners = MultiThreadedObjectGenerator
.prepareForCreateTreeMT(getBinding(), repoId, docsPerFolder, foldersPerFolders, depth, documentType,
- folderType, contentSizeInKB, folderIds, doCleanup);
+ folderType, contentSizeInKB, folderIds, fContentKind, doCleanup);
MultiThreadedObjectGenerator.runMultiThreaded(runners);
System.out.println("Filling repository succeeded.");
@@ -260,6 +276,7 @@ public class ObjGenApp {
System.out.println("Delete all objects after creation: " + options.valueOf(fCleanup));
System.out.println("Number of actions to perform: " + options.valueOf(fCount));
System.out.println("Number of threads to start: " + options.valueOf(fThreads));
+ System.out.println("Kind of created content: " + options.valueOf(fContentKindStr));
}
private void createSingleDocument(OptionSet options) {
@@ -321,7 +338,7 @@ public class ObjGenApp {
MultiThreadedObjectGenerator.ObjectGeneratorRunner runner = MultiThreadedObjectGenerator
.prepareForCreateDocument(getBinding(), repoId, documentType, contentSizeInKB, rootFolderId, docCount,
- doCleanup);
+ fContentKind, doCleanup);
ObjectGenerator gen = runner.getObjectGenerator();
String[] ids = runner.doCreateDocument();
System.out.println();
@@ -345,7 +362,7 @@ public class ObjGenApp {
MultiThreadedObjectGenerator.ObjectGeneratorRunner[] runners = MultiThreadedObjectGenerator
.prepareForCreateDocumentMT(noThreads, getBinding(), repoId, documentType, contentSizeInKB,
- rootFolderId, docCount, doCleanup);
+ rootFolderId, docCount, fContentKind, doCleanup);
MultiThreadedObjectGenerator.runMultiThreaded(runners);
System.out.println("Document creation succeeded. All threads terminated.");
Modified: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/ObjectGenerator.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/ObjectGenerator.java?rev=1241563&r1=1241562&r2=1241563&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/ObjectGenerator.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/main/java/org/apache/chemistry/opencmis/util/repository/ObjectGenerator.java Tue Feb 7 19:26:17 2012
@@ -49,7 +49,8 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.spi.NavigationService;
import org.apache.chemistry.opencmis.commons.spi.ObjectService;
import org.apache.chemistry.opencmis.commons.spi.RepositoryService;
-import org.apache.chemistry.opencmis.util.content.LoreIpsum;
+import org.apache.chemistry.opencmis.util.content.fractal.FractalGenerator;
+import org.apache.chemistry.opencmis.util.content.loremipsum.LoremIpsum;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -77,6 +78,12 @@ public class ObjectGenerator {
List<String> fTopLevelFoldersCreated; // list of ids created on first level
/**
+ * supported kinds of content
+ *
+ */
+ public enum CONTENT_KIND {StaticText, LoremIpsumText, LoremIpsumHtml, ImageFractalJpeg};
+
+ /**
* Indicates if / how many documents are created in each folder
*/
private int fNoDocumentsToCreate;
@@ -121,9 +128,10 @@ public class ObjectGenerator {
private int fContentSizeInK = 0;
/**
- * true: use Lore Ipsum generator, false: use static text
+ * Kind of content to create
*/
- private boolean useLoreIpsum = true;
+ private CONTENT_KIND fContentKind;
+
private static final String NAMEPROPVALPREFIXDOC = "My_Document-";
private static final String NAMEPROPVALPREFIXFOLDER = "My_Folder-";
@@ -135,9 +143,14 @@ public class ObjectGenerator {
* use UUIDs to generate folder and document names
*/
private boolean fUseUuids;
+
+ /**
+ * generator for images
+ */
+ private FractalGenerator fractalGenerator;
public ObjectGenerator(BindingsObjectFactory factory, NavigationService navSvc, ObjectService objSvc,
- RepositoryService repSvc, String repositoryId) {
+ RepositoryService repSvc, String repositoryId, CONTENT_KIND contentKind) {
super();
fFactory = factory;
fNavSvc = navSvc;
@@ -157,6 +170,8 @@ public class ObjectGenerator {
fCleanup = false;
fTopLevelDocsCreated = new ArrayList<String>();
fTopLevelFoldersCreated = new ArrayList<String>();
+ fContentKind = contentKind;
+ fractalGenerator = new FractalGenerator();
}
public void setNumberOfDocumentsToCreatePerFolder(int noDocumentsToCreate) {
@@ -183,12 +198,12 @@ public class ObjectGenerator {
fContentSizeInK = sizeInK;
}
- public boolean getLoreIpsumGenerator() {
- return useLoreIpsum;
+ public CONTENT_KIND getContentKind() {
+ return fContentKind;
}
- public void setLoreIpsumGenerator(boolean use) {
- useLoreIpsum = use;
+ public void setLoreIpsumGenerator(CONTENT_KIND contentKind) {
+ fContentKind = contentKind;
}
public void setCleanUpAfterCreate(boolean doCleanup) {
@@ -436,9 +451,24 @@ public class ObjectGenerator {
// log.info("create document in folder " + folderId);
Properties props = createDocumentProperties(no, level);
String id = null;
+
if (fContentSizeInK > 0) {
- contentStream = useLoreIpsum ? createContent() : createContentStaticText();
+ switch (fContentKind) {
+ case StaticText:
+ contentStream = createContentStaticText();
+ break;
+ case LoremIpsumText:
+ contentStream = createContentLoremIpsumText();
+ break;
+ case LoremIpsumHtml:
+ contentStream = createContentLoremIpsumHtml();
+ break;
+ case ImageFractalJpeg:
+ contentStream = createContentFractalimageJpeg();
+ break;
+ }
}
+
try {
fTimeLoggerCreateDoc.start();
id = fObjSvc.createDocument(fRepositoryId, props, folderId, contentStream, versioningState, policies,
@@ -481,13 +511,25 @@ public class ObjectGenerator {
}
}
- private ContentStream createContent() {
+ private ContentStream createContentLoremIpsumHtml() {
+ ContentStreamImpl content = new ContentStreamImpl();
+ content.setFileName("data.html");
+ content.setMimeType("text/html");
+ int len = fContentSizeInK * 1024; // size of document in K
+
+ LoremIpsum ipsum = new LoremIpsum();
+ String text = ipsum.generateParagraphsFullHtml(len, true);
+ content.setStream(new ByteArrayInputStream(text.getBytes()));
+ return content;
+ }
+
+ private ContentStream createContentLoremIpsumText() {
ContentStreamImpl content = new ContentStreamImpl();
content.setFileName("data.txt");
content.setMimeType("text/plain");
int len = fContentSizeInK * 1024; // size of document in K
- LoreIpsum ipsum = new LoreIpsum();
+ LoremIpsum ipsum = new LoremIpsum();
String text = ipsum.generateParagraphsPlainText(len, 80, true);
content.setStream(new ByteArrayInputStream(text.getBytes()));
return content;
@@ -516,6 +558,24 @@ public class ObjectGenerator {
return content;
}
+ private ContentStream createContentFractalimageJpeg() {
+ ContentStreamImpl content = null;
+
+ try {
+ ByteArrayOutputStream bos = fractalGenerator.generateFractal();
+ content = new ContentStreamImpl();
+ content.setFileName("image.jpg");
+ content.setMimeType("image/jpeg");
+ content.setStream(new ByteArrayInputStream(bos.toByteArray()));
+ bos.close();
+ } catch (IOException e) {
+ System.err.println("Error when generating fractal image: " + e);
+ e.printStackTrace();
+ }
+
+ return content;
+ }
+
private Properties createFolderProperties(int no, int level) {
List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
properties.add(fFactory.createPropertyStringData(PropertyIds.NAME, generateFolderNameValue(no, level)));
Added: chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/test/java/org/apache/chemistry/opencmis/util/content/loremipsum/LoremIpsumTest.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/test/java/org/apache/chemistry/opencmis/util/content/loremipsum/LoremIpsumTest.java?rev=1241563&view=auto
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/test/java/org/apache/chemistry/opencmis/util/content/loremipsum/LoremIpsumTest.java (added)
+++ chemistry/opencmis/trunk/chemistry-opencmis-test/chemistry-opencmis-test-util/src/test/java/org/apache/chemistry/opencmis/util/content/loremipsum/LoremIpsumTest.java Tue Feb 7 19:26:17 2012
@@ -0,0 +1,401 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.util.content.loremipsum;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.io.Writer;
+
+import org.apache.chemistry.opencmis.util.content.loremipsum.LoremIpsum;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class LoremIpsumTest {
+
+ private static final Log LOG = LogFactory.getLog(LoremIpsumTest.class);
+
+ String sample = "One two three four five six. Seven eight nine ten eleven twelve. "
+ + "\n\n"
+ + "Thirteen fourteen fifteen sixteen. Seventeen eighteen nineteen twenty.";
+
+ String dictionary = "a bb ccc dddd eeeee ffffff ggggggg hhhhhhhh iiiiiiiii jjjjjjjjjj kkkkkkkkkkk llllllllllll";
+ LoremIpsum generator = new LoremIpsum(sample, dictionary);
+
+ @Before
+ public void setUp() throws Exception {
+ dictionary.split(" ");
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ }
+
+ @Test
+ public void test_mean() {
+ int[] ia1 = {1, 2, 3, 4};
+ assertEquals(2.5d, LoremIpsum.mean(ia1), 0.01d);
+ int[] ia2 = {6, 6, 4, 4};
+ assertEquals(5.0d, LoremIpsum.mean(ia2), 0.01d);
+ }
+
+ @Test
+ public void test_mean_empty() {
+ int[] ia1 = {};
+ assertEquals(0.0d, LoremIpsum.mean(ia1), 0.01d);
+ }
+
+ @Test
+ public void test_variance() {
+ double[] ia1 = {6.0d, 6.0d, 4.0d, 4.0d};
+ assertEquals(1.0d, LoremIpsum.variance(ia1), 0.01d);
+ double[] ia2 = {1.0d, 2.0d, 3.0d, 4.0d};
+ assertEquals(1.25d, LoremIpsum.variance(ia2), 0.01d);
+ }
+
+ @Test
+ public void test_sigma() {
+ double[] ia1 = {6.0d, 6.0d, 4.0d, 4.0d};
+ double[] ia2 = {1.0d, 2.0d, 3.0d, 4.0d};
+ assertEquals(1.0d, LoremIpsum.sigma(ia1), 0.01d);
+ assertEquals(Math.sqrt(1.25), LoremIpsum.sigma(ia2), 0.01d);
+ }
+
+ @Test
+ public void test_sigma_empty() {
+ int[] ia1 = {};
+ assertEquals(0.0d, LoremIpsum.sigma(ia1), 0.01d);
+ }
+
+ @Test
+ public void test_split_sentences() {
+ String[] sentences1 = {"Hello", "Hi"};
+ assertArrayEquals (sentences1, LoremIpsum.splitSentences("Hello. Hi."));
+ String[] sentences2 = {"One two three four five six",
+ "Seven eight nine ten eleven twelve",
+ "Thirteen fourteen fifteen sixteen",
+ "Seventeen eighteen nineteen twenty"};
+ assertArrayEquals(sentences2, LoremIpsum.splitSentences(sample));
+ }
+
+ @Test
+ public void test_split_sentences_empty() {
+ String[] sentences = {};
+ assertArrayEquals(sentences, LoremIpsum.splitSentences(""));
+ }
+
+ @Test
+ public void test_split_sentences_trailing() {
+ String[] sentences1 = {"Hello", "Hi", "Hello"};
+ assertArrayEquals(sentences1, LoremIpsum.splitSentences("Hello. Hi. Hello"));
+ String[] sentences2 = {"Hello", "Hi", "Hello"};
+ assertArrayEquals(sentences2, LoremIpsum.splitSentences(" Hello. Hi. Hello "));
+ String[] sentences3 = {"Hello", "Hi", "Hello"};
+ assertArrayEquals(sentences3, LoremIpsum.splitSentences(".. Hello... Hi.... Hello "));
+ }
+
+ @Test
+ public void test_split_paragraphs() {
+ String[] paragraphs = {"One two three four five six. Seven eight nine ten eleven twelve.",
+ "Thirteen fourteen fifteen sixteen. Seventeen eighteen nineteen twenty."};
+ assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs(sample));
+ }
+
+ @Test
+ public void test_split_paragraphs_empty() {
+ String[] paragraphs = {};
+ assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs(""));
+ }
+
+ @Test
+ public void test_split_paragraphs_trailing() {
+ String[] paragraphs = {"Hello", "Hi"};
+ assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("Hello\n\nHi"));
+ assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("Hello\n\nHi\n"));
+ assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("Hello\n\nHi\n\n"));
+ assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("Hello\n\nHi\n\n\n"));
+ assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("Hello\n\nHi\n\n\n\n\n\n"));
+ assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("\nHello\n\nHi"));
+ assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("\n\nHello\n\nHi"));
+ assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("\n\n\nHello\n\nHi"));
+ assertArrayEquals(paragraphs, LoremIpsum.splitParagraphs("\n\n\n\n\n\nHello\n\nHi"));
+ }
+
+ @Test
+ public void test_split_words() {
+ String[] words = {"One", "two", "three", "four"};
+ assertArrayEquals(words, LoremIpsum.splitWords("One two three four"));
+ assertArrayEquals(words, LoremIpsum.splitWords(" One two three four "));
+ }
+
+ @Test
+ public void test_split_words_empty() {
+ String[] words = {};
+ assertArrayEquals(words, LoremIpsum.splitWords(""));
+ }
+
+ @Test
+ public void test_choose_closest() {
+ Integer[] intArray1 ={1,2,3,4};
+ assertEquals(1, LoremIpsum.chooseClosest(intArray1, 1));
+ Integer[] intArray2 ={1,2,3,4};
+ assertEquals(4, LoremIpsum.chooseClosest(intArray2, 4));
+ assertEquals(4, LoremIpsum.chooseClosest(intArray2, 20));
+ assertEquals(1, LoremIpsum.chooseClosest(intArray2, -10));
+ Integer[] intArray3 ={1,4};
+ assertEquals(1, LoremIpsum.chooseClosest(intArray3, 2));
+ assertEquals(4, LoremIpsum.chooseClosest(intArray3, 3));
+ Integer[] intArray4 ={1,3};
+ assertEquals(1, LoremIpsum.chooseClosest(intArray4, 2));
+ Integer[] intArray5 ={3,1};
+ assertEquals(3, LoremIpsum.chooseClosest(intArray5, 2));
+ Integer[] intArray6 ={1};
+ assertEquals(1, LoremIpsum.chooseClosest(intArray6, 200));
+ }
+
+ @Test
+ public void test_sentence_mean() {
+ assertEquals(5.0d, generator.getSentenceMean(), 0.01d);
+ }
+
+ @Test
+ public void test_paragraph_mean() {
+ assertEquals(2.0d, generator.getParagraphMean(), 0.01d);
+ }
+
+ @Test
+ public void test_sentence_sigma() {
+ assertEquals(1.0d, generator.getSentenceSigma(), 0.01d);
+ }
+
+ @Test
+ public void test_paragraph_sigma() {
+ assertEquals(0.0d, generator.getParagraphSigma(), 0.01d);
+ }
+
+ @Test
+ public void test_sample() {
+ assertEquals(generator.getSample(), sample);
+ }
+
+ @Test
+ public void test_dictionary() {
+ assertEquals(generator.getDictionary(), dictionary);
+ }
+
+ @Test
+ public void test_set_dictionary() {
+ String newdict = "a b c";
+ generator.setDictionary(newdict);
+ assertEquals(generator.getDictionary(), newdict);
+ }
+
+ @Test
+ public void test_init_no_sample() {
+ doGenerate("");
+ doGenerate(" ");
+ doGenerate("\n\n");
+ doGenerate(" \n\n ");
+ doGenerate(" .\n\n .");
+ }
+
+ private void doGenerate(String text) {
+ try {
+ generator = new LoremIpsum(text, dictionary);
+ generator.generateParagraph(false);
+ fail("Sample text " + text + " should generate exception.");
+ } catch (RuntimeException e) {
+ assertTrue(e.getMessage().contains("Invalid sample text"));
+ }
+ }
+
+ @Test
+ public void test_init_no_dict() {
+ doGenerateNoDict("");
+ doGenerateNoDict(" ");
+ doGenerateNoDict("\n\n");
+ doGenerateNoDict(" \n\n ");
+ }
+
+ private void doGenerateNoDict(String dict) {
+ try {
+ generator = new LoremIpsum(sample, dict);
+ generator.generateParagraph(false);
+ fail("Dictionary " + dict + " should generate exception.");
+ } catch (RuntimeException e) {
+ assertEquals(e.getMessage(), "Invalid dictionary.");
+ }
+ }
+
+ @Test
+ public void testGenerate() {
+ LOG.debug("Generate new text: ");
+ String newDict = "me you he the One two three four five six Seven eight nine ten eleven twelve "
+ + "Thirteen fourteen fifteen sixteen Seventeen eighteen nineteen twenty joe fred some";
+ String[] newParagraphs = new String[4];
+ generator.setDictionary(newDict);
+ for (int i=0; i<newParagraphs.length; i++) {
+ newParagraphs[i] = generator.generateParagraph(false);
+ LOG.debug(newParagraphs[i]);
+ LOG.debug("");
+ }
+ assertFalse(newParagraphs[0].equals(newParagraphs[1]));
+ assertFalse(newParagraphs[0].equals(newParagraphs[2]));
+ assertFalse(newParagraphs[0].equals(newParagraphs[3]));
+ assertFalse(newParagraphs[1].equals(newParagraphs[2]));
+ assertFalse(newParagraphs[1].equals(newParagraphs[3]));
+ assertFalse(newParagraphs[2].equals(newParagraphs[3]));
+ }
+
+ @Test
+ public void testGenerateLoreIpsum() {
+ LOG.debug("Generate new Lore Ipsum text: ");
+ LoremIpsum ipsum = new LoremIpsum();
+ String[] newParagraphs = new String[4];
+ for (int i=0; i<newParagraphs.length; i++) {
+ newParagraphs[i] = ipsum.generateParagraph(false);
+ LOG.debug(newParagraphs[i]);
+ LOG.debug("");
+ LOG.debug("");
+ }
+ }
+
+ @Test
+ public void testGenerateLoreIpsumHtml1() {
+ LOG.debug("Generate new Lore Ipsum as html paragraphs:");
+ LoremIpsum ipsum = new LoremIpsum();
+ String output = ipsum.generateParagraphsHtml(2048, true);
+ LOG.debug(output);
+ LOG.debug("");
+ }
+
+ @Test
+ public void testGenerateLoreIpsumHtml2() {
+ LOG.debug("Generate new Lore Ipsum as one html paragraph:");
+ LoremIpsum ipsum = new LoremIpsum();
+ String output = ipsum.generateOneParagraphHtml(2048, true);
+ LOG.debug(output);
+ LOG.debug("");
+ }
+
+ @Test
+ public void testGenerateLoreIpsumHtml3() {
+ LOG.debug("Generate new Lore Ipsum as full html document: ");
+ LoremIpsum ipsum = new LoremIpsum();
+ String output = ipsum.generateParagraphsFullHtml(2048, true);
+ LOG.debug(output);
+ LOG.debug("");
+ }
+
+ @Test
+ public void testGenerateLoreIpsumPlainText() {
+ LOG.debug("Generate new Lore Ipsum as plain text: ");
+ LoremIpsum ipsum = new LoremIpsum();
+ String output = ipsum.generateParagraphsPlainText(2048, true);
+ LOG.debug(output);
+ LOG.debug("");
+ }
+
+ @Test
+ public void testGenerateLoreIpsumPlainTextFormatted() {
+ LOG.debug("Generate new Lore Ipsum as plain text with 60 columns: ");
+ LoremIpsum ipsum = new LoremIpsum();
+ String output = ipsum.generateParagraphsPlainText(256, 60, false);
+ LOG.debug(output);
+ LOG.debug("");
+ }
+
+ @Test
+ public void testGenerateLoreIpsumHtml1Writer() throws IOException {
+ LOG.debug("Generate new Lore Ipsum as html paragraphs with PrintWriter:");
+ LoremIpsum ipsum = new LoremIpsum();
+ StringWriter writer = new StringWriter();
+ ipsum.generateParagraphsHtml(writer, 2048, true);
+ LOG.debug(writer.toString());
+ LOG.debug("End Test.");
+ }
+
+ @Test
+ public void testGenerateLoreIpsumHtml2Writer() throws IOException {
+ LOG.debug("Generate new Lore Ipsum as full html paragraph with PrintWriter:");
+ LoremIpsum ipsum = new LoremIpsum();
+ StringWriter writer = new StringWriter();
+ ipsum.generateParagraphsFullHtml(writer, 2048, true);
+ LOG.debug(writer.toString());
+ LOG.debug("End Test.");
+ }
+
+ @Test
+ public void testGenerateLoreIpsumPlainTextWriter() throws IOException {
+ LOG.debug("Generate new Lore Ipsum as plain text with PrintWriter: ");
+ LoremIpsum ipsum = new LoremIpsum();
+ StringWriter writer = new StringWriter();
+ ipsum.generateParagraphsPlainText(writer, 2048, true);
+ LOG.debug(writer.toString());
+ LOG.debug("End Test.");
+ }
+
+ @Test
+ public void testGenerateLoreIpsumPlainTextFormattedWriter() throws IOException {
+ LOG.debug("Generate new Lore Ipsum as plain text with 60 columns with PrintWriter: ");
+ LoremIpsum ipsum = new LoremIpsum();
+ StringWriter writer = new StringWriter();
+ ipsum.generateParagraphsPlainText(writer, 256, 60, false);
+ LOG.debug(writer.toString());
+ LOG.debug("End Test.");
+ }
+
+ @Test
+ public void testGenerateLoreIpsumGerman() throws Exception {
+ LOG.debug("Generate new Lore Ipsum Ferry Tale: ");
+ InputStream is = this.getClass().getResourceAsStream("/HaenselUndGretel.txt");
+
+ // read stream into a string
+ final char[] buffer = new char[0x10000];
+ StringBuilder sample = new StringBuilder();
+ Reader in = new InputStreamReader(is, "ISO-8859-1");
+ int read;
+ do {
+ read = in.read(buffer, 0, buffer.length);
+ if (read>0) {
+ sample.append(buffer, 0, read);
+ }
+ } while (read>=0);
+
+
+ LoremIpsum ipsum = new LoremIpsum(sample.toString());
+ String output = ipsum.generateParagraphsPlainText(4096, 80, false);
+ LOG.debug(output);
+ LOG.debug("End Test.");
+ }
+
+}