You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by mi...@apache.org on 2010/08/30 18:06:32 UTC
svn commit: r990840 - in
/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src:
main/java/org/apache/clerezza/tools/offline/
main/java/org/apache/clerezza/tools/offline/utils/
test/java/org/apache/clerezza/tools/off...
Author: mir
Date: Mon Aug 30 16:06:31 2010
New Revision: 990840
URL: http://svn.apache.org/viewvc?rev=990840&view=rev
Log:
CLEREZZA-292: added missing classes
Added:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/ThumbnailCondition.java
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/utils/ConditionalOutputStream.java
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/utils/StreamCondition.java
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/test/java/org/apache/clerezza/tools/offline/ThumbnailConditionTest.java
Added: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/ThumbnailCondition.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/ThumbnailCondition.java?rev=990840&view=auto
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/ThumbnailCondition.java (added)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/ThumbnailCondition.java Mon Aug 30 16:06:31 2010
@@ -0,0 +1,204 @@
+/*
+ * Copyright 2010 mir.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+package org.apache.clerezza.tools.offline;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import org.apache.clerezza.tools.offline.utils.StreamCondition;
+import org.apache.clerezza.platform.content.representations.core.ThumbnailService;
+import org.apache.clerezza.rdf.core.UriRef;
+
+/**
+ *
+ * @author mir
+ */
+public class ThumbnailCondition implements StreamCondition {
+
+ private final static byte[] SRC_BYTES = "src=\"".getBytes();
+ private final static byte[] HREF_BYTES = "href=\"".getBytes();
+ private final static byte QUOTE_BYTE = "\"".getBytes()[0];
+ private final static byte[] THUMBNAIL_SERVICE_BYTES = "/thumbnail-service?".getBytes();
+ private ThumbnailService thumbnailService;
+ private boolean isScr = true;
+ private boolean isHref = true;
+ private boolean isSatisfied = false;
+ private byte[] thumbnailBytes = null;
+ private ByteArrayOutputStream cachedQueryParams = new ByteArrayOutputStream();
+
+ private enum Phase {CHECK_TAG_ATTRIBUTE, CHECK_THUMBNAIL_SERVICE, LOOK_FOR_QUOTE};
+ private Phase currentPhase = Phase.CHECK_TAG_ATTRIBUTE;
+ private int arrayPosition = 0;
+
+ public ThumbnailCondition(ThumbnailService thumbnailService) {
+ this.thumbnailService = thumbnailService;
+ }
+
+ private void reset() {
+ isScr = true;
+ isHref = true;
+ isSatisfied = false;
+ arrayPosition = 0;
+ cachedQueryParams.reset();
+ thumbnailBytes = null;
+ currentPhase = Phase.CHECK_TAG_ATTRIBUTE;
+ }
+
+ @Override
+ public boolean feed(int b) {
+ if (isSatisfied) {
+ reset();
+ }
+ boolean result = false;
+ if (currentPhase.equals(Phase.CHECK_TAG_ATTRIBUTE)) {
+ result = checkTagAttribute(b);
+ } else if (currentPhase.equals(Phase.CHECK_THUMBNAIL_SERVICE)) {
+ result = checkThumbnailUri(b);
+ } else if (currentPhase.equals(Phase.LOOK_FOR_QUOTE)) {
+ result = lookForQuote(b);
+ }
+ return result;
+ }
+
+ private boolean checkTagAttribute(int b) {
+ if (isScr) {
+ if (SRC_BYTES[arrayPosition] != b) {
+ isScr = false;
+ } else if (SRC_BYTES.length == arrayPosition + 1) {
+ currentPhase = Phase.CHECK_THUMBNAIL_SERVICE;
+ arrayPosition = 0;
+ return true;
+ }
+ }
+ if (isHref) {
+ if (HREF_BYTES[arrayPosition] != b) {
+ isHref = false;
+ } else if (HREF_BYTES.length == arrayPosition + 1) {
+ currentPhase = Phase.CHECK_THUMBNAIL_SERVICE;
+ arrayPosition = 0;
+ return true;
+ }
+ }
+ if (!isHref && !isScr) {
+ reset();
+ return false;
+ }
+ arrayPosition++;
+ return true;
+ }
+
+ private boolean checkThumbnailUri(int b) {
+ if (arrayPosition == 16) {
+ }
+ if (THUMBNAIL_SERVICE_BYTES[arrayPosition] != b) {
+ reset();
+ return false;
+ } else if (THUMBNAIL_SERVICE_BYTES.length == arrayPosition + 1) {
+ currentPhase = Phase.LOOK_FOR_QUOTE;
+ }
+ arrayPosition++;
+ return true;
+ }
+
+ private boolean lookForQuote(int b) {
+ if (b == QUOTE_BYTE) {
+ prepareBytes();
+ isSatisfied = true;
+ return false;
+ } else {
+ cachedQueryParams.write(b);
+ }
+ return true;
+ }
+
+ private void prepareBytes() {
+ ByteArrayOutputStream bous = new ByteArrayOutputStream();
+ try {
+ if (isHref) {
+ bous.write(HREF_BYTES);
+ } else {
+ bous.write(SRC_BYTES);
+ }
+ bous.write(getThumbnailUri());
+ bous.write(QUOTE_BYTE);
+ thumbnailBytes = bous.toByteArray();
+ } catch (IOException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ private byte[] getThumbnailUri() {
+ ThumbnailServiceParams params = parseThumbnailServiceParams();
+ UriRef thumbnailUri = thumbnailService.getThumbnailUri(params.getUri(),
+ params.getWidth(), params.getHeight());
+ return thumbnailUri.getUnicodeString().getBytes();
+ }
+
+ @Override
+ public boolean isSatisfied() {
+ return isSatisfied;
+ }
+
+ @Override
+ public byte[] getBytes() {
+ return thumbnailBytes;
+ }
+
+ private ThumbnailServiceParams parseThumbnailServiceParams() {
+ Integer width = null, height = null;
+ UriRef uri = null;
+ String queryParams = cachedQueryParams.toString();
+ queryParams = queryParams.replace("&", "&");
+ String[] nameValues = queryParams.split("&");
+ for (String nameValue : nameValues) {
+ String[] nameValuePair = nameValue.split("=");
+ if (nameValuePair.length == 2) {
+ String name = nameValuePair[0];
+ if (name.equals("uri")) {
+ uri = new UriRef(nameValuePair[1]);
+ } else if (name.equals("width")) {
+ width = Integer.valueOf(nameValuePair[1]);
+ } else if (name.equals("height")) {
+ height = Integer.valueOf(nameValuePair[1]);
+ }
+ }
+ }
+ return new ThumbnailServiceParams(width, height, uri);
+ }
+
+ private class ThumbnailServiceParams {
+ private Integer width, height;
+ private UriRef uri;
+
+ public ThumbnailServiceParams(Integer width, Integer height, UriRef uri) {
+ this.width = width;
+ this.height = height;
+ this.uri = uri;
+ }
+
+ public Integer getHeight() {
+ return height;
+ }
+
+ public UriRef getUri() {
+ return uri;
+ }
+
+ public Integer getWidth() {
+ return width;
+ }
+ }
+}
Added: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/utils/ConditionalOutputStream.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/utils/ConditionalOutputStream.java?rev=990840&view=auto
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/utils/ConditionalOutputStream.java (added)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/utils/ConditionalOutputStream.java Mon Aug 30 16:06:31 2010
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2010 mir.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.apache.clerezza.tools.offline.utils;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * The conditional output stream wraps an <code>OutputStream</code>. All bytes
+ * written to the condition output stream are tested by the <code>StreamCondition</code>
+ * given to the constructor of the conditional output stream. The stream condition
+ * can modify the byte stream if it is satisfied.
+ *
+ * @author mir
+ */
+public class ConditionalOutputStream extends OutputStream {
+
+ private OutputStream out;
+ private StreamCondition condition;
+ private ByteArrayOutputStream cachedBytes = new ByteArrayOutputStream();
+
+ public ConditionalOutputStream(OutputStream out, StreamCondition condition) {
+ this.out = out;
+ this.condition = condition;
+ }
+
+ @Override
+ public void write(int b) throws IOException {
+ if (condition.feed(b)) {
+ cachedBytes.write(b);
+ } else {
+ if (condition.isSatisfied()) {
+ out.write(condition.getBytes());
+ cachedBytes.reset();
+ } else {
+ if (cachedBytes.size() > 0) {
+ out.write(cachedBytes.toByteArray());
+ cachedBytes.reset();
+ }
+ out.write(b);
+ }
+ }
+ }
+
+}
Added: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/utils/StreamCondition.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/utils/StreamCondition.java?rev=990840&view=auto
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/utils/StreamCondition.java (added)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/main/java/org/apache/clerezza/tools/offline/utils/StreamCondition.java Mon Aug 30 16:06:31 2010
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2010 mir.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.apache.clerezza.tools.offline.utils;
+
+/**
+ *
+ * @author mir
+ */
+public interface StreamCondition {
+
+ /**
+ * This method is called by the ConditionalOutputStream. The conditional
+ * output stream feeds the condition with bytes as long as the feed()-method
+ * returns true. If false is returned, then the condition is either satified
+ * or unsatisfied. This can be determined by calling isSatisfied() of this
+ * condition.
+ * After returning false, the condition can be fed again.
+ *
+ * @param b
+ * @return
+ */
+ public boolean feed(int b);
+
+ /**
+ * Returns true if the condition is satisfied, false otherwise.
+ * @return
+ */
+ public boolean isSatisfied();
+
+ /**
+ * The ConditionOutputStream will call this method if the condition is
+ * satisfied. The returned bytes will be written into its underlying outputstream
+ * instead of the bytes that were fed to the condition.
+ * @return
+ */
+ public byte[] getBytes();
+}
Added: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/test/java/org/apache/clerezza/tools/offline/ThumbnailConditionTest.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/test/java/org/apache/clerezza/tools/offline/ThumbnailConditionTest.java?rev=990840&view=auto
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/test/java/org/apache/clerezza/tools/offline/ThumbnailConditionTest.java (added)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.tools.offline/src/test/java/org/apache/clerezza/tools/offline/ThumbnailConditionTest.java Mon Aug 30 16:06:31 2010
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2010 mir.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * under the License.
+ */
+
+package org.apache.clerezza.tools.offline;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import org.apache.clerezza.platform.content.representations.core.ThumbnailService;
+import org.apache.clerezza.rdf.core.UriRef;
+import org.apache.clerezza.tools.offline.utils.ConditionalOutputStream;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ *
+ * @author mir
+ */
+public class ThumbnailConditionTest {
+
+ private static final byte[] input = "<img href=\"/thumbnail-service?uri=http://localhost:8080/html_export/digital-assets/2010/08/30/770a7f14-74a7-4036-8341-f9e50e944e06&width=700&height=300\" />".getBytes();
+
+ @Test
+ public void thumbnailConditionTest() throws IOException {
+ ByteArrayOutputStream bous = new ByteArrayOutputStream();
+ OutputStream out = new ConditionalOutputStream(bous,
+ new ThumbnailCondition(new ThumbnailService() {
+
+ @Override
+ public UriRef getThumbnailUri(UriRef infoBitUri, Integer width, Integer height) {
+ return new UriRef("http://example.com/test");
+ }
+ }));
+
+ out.write(input);
+ Assert.assertEquals("<img href=\"http://example.com/test\" />", bous.toString());
+ }
+}