Moved com.google.zxing.client.result from core-ext to core, rewrote it for J2ME, changed javame to use it, and removed core-ext

git-svn-id: https://zxing.googlecode.com/svn/trunk@114 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
srowen 2007-12-12 18:38:22 +00:00
parent 39389daad4
commit 0daa06a5e0
17 changed files with 330 additions and 250 deletions

View file

@ -23,20 +23,17 @@
<target name="build">
<ant dir="core" target="build"/>
<ant dir="javame" target="build"/>
<ant dir="core-ext" target="build"/>
<ant dir="javase" target="build"/>
</target>
<target name="buildwithoutj2me">
<ant dir="core" target="build"/>
<ant dir="core-ext" target="build"/>
<ant dir="javase" target="build"/>
</target>
<target name="clean">
<ant dir="core" target="clean"/>
<ant dir="javame" target="clean"/>
<ant dir="core-ext" target="clean"/>
<ant dir="javase" target="clean"/>
</target>
@ -50,7 +47,6 @@
<include name="build.properties"/>
<include name="core/**"/>
<include name="javame/**"/>
<include name="core-ext/**"/>
<include name="javase/**"/>
<include name="docs/**"/>
<exclude name="*.iml"/>
@ -63,7 +59,6 @@
<javadoc destdir="docs/javadoc" footer="&lt;script src=&quot;http://www.google-analytics.com/urchin.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;&lt;script type=&quot;text/javascript&quot;&gt;_uacct = &quot;UA-788492-4&quot;; urchinTracker();&lt;/script&gt;">
<sourcepath>
<pathelement location="core/src"/>
<pathelement location="core-ext/src"/>
<pathelement location="javame/src"/>
<pathelement location="javase/src"/>
</sourcepath>

View file

@ -1,46 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2007 Google Inc.
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.
-->
<project name="core-ext" default="build">
<target name="init">
<tstamp/>
</target>
<target name="build" depends="init">
<mkdir dir="build"/>
<javac srcdir="src"
destdir="build"
source="1.5"
target="1.5"
optimize="true"
debug="true"
deprecation="true">
<classpath>
<pathelement location="../core/core.jar"/>
</classpath>
</javac>
<jar jarfile="core-ext.jar" basedir="build" level="9"/>
</target>
<target name="clean">
<delete dir="build"/>
<delete file="core-ext.jar"/>
</target>
</project>

View file

@ -1,43 +0,0 @@
/*
* Copyright 2007 Google Inc.
*
* 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.
*/
package com.google.zxing.client.result;
/**
* @author srowen@google.com (Sean Owen)
*/
public enum ParsedReaderResultType {
// Order is important: if a string could be construed as multiple types,
// put the most specific one first
BOOKMARK(BookmarkDoCoMoResult.class),
ADDRESSBOOK(AddressBookDoCoMoResult.class),
EMAIL(EmailDoCoMoResult.class),
UPC(UPCParsedResult.class),
URI(URIParsedResult.class),
TEXT(TextParsedResult.class);
private Class<? extends ParsedReaderResult> resultClass;
ParsedReaderResultType(Class<? extends ParsedReaderResult> resultClass) {
this.resultClass = resultClass;
}
Class<? extends ParsedReaderResult> getResultClass() {
return resultClass;
}
}

View file

@ -1,51 +0,0 @@
/*
* Copyright 2007 Google Inc.
*
* 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.
*/
package com.google.zxing.client.result;
import java.net.URI;
import java.net.URISyntaxException;
/**
* @author srowen@google.com (Sean Owen)
*/
public final class URIParsedResult extends ParsedReaderResult {
private final URI uri;
public URIParsedResult(String rawText) {
super(ParsedReaderResultType.URI);
if (rawText.startsWith("URL:")) {
// Sometimes a URL is prefixed with "URL:" -- support this
rawText = rawText.substring(4);
}
try {
uri = new URI(rawText);
} catch (URISyntaxException urise) {
throw new IllegalArgumentException(urise.toString());
}
}
public URI getURI() {
return uri;
}
@Override
public String getDisplayResult() {
return uri.toString();
}
}

View file

@ -16,8 +16,7 @@
package com.google.zxing.client.result;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
/**
* See
@ -36,7 +35,7 @@ abstract class AbstractDoCoMoResult extends ParsedReaderResult {
// to run in a J2ME enviroment, where this unavailable.
static String[] matchPrefixedField(String prefix, String rawText) {
List<String> matches = null;
Vector matches = null;
int i = 0;
int max = rawText.length();
while (i < max) {
@ -59,9 +58,9 @@ abstract class AbstractDoCoMoResult extends ParsedReaderResult {
} else {
// found a match
if (matches == null) {
matches = new ArrayList<String>(3); // lazy init
matches = new Vector(3); // lazy init
}
matches.add(unescape(rawText.substring(start, i)));
matches.addElement(unescape(rawText.substring(start, i)));
i++;
done = true;
}
@ -70,7 +69,12 @@ abstract class AbstractDoCoMoResult extends ParsedReaderResult {
if (matches == null) {
return null;
}
return matches.toArray(new String[matches.size()]);
int size = matches.size();
String[] result = new String[size];
for (int j = 0; j < size; j++) {
result[j] = (String) matches.elementAt(j);
}
return result;
}
static String matchSinglePrefixedField(String prefix, String rawText) {
@ -91,7 +95,7 @@ abstract class AbstractDoCoMoResult extends ParsedReaderResult {
int backslash = escaped.indexOf((int) '\\');
if (backslash >= 0) {
int max = escaped.length();
StringBuilder unescaped = new StringBuilder(max - 1);
StringBuffer unescaped = new StringBuffer(max - 1);
unescaped.append(escaped.toCharArray(), 0, backslash);
boolean nextIsEscaped = false;
for (int i = backslash; i < max; i++) {
@ -109,7 +113,7 @@ abstract class AbstractDoCoMoResult extends ParsedReaderResult {
return escaped;
}
static void maybeAppend(String value, StringBuilder result) {
static void maybeAppend(String value, StringBuffer result) {
if (value != null) {
result.append('\n');
result.append(value);

View file

@ -66,9 +66,8 @@ public final class AddressBookDoCoMoResult extends AbstractDoCoMoResult {
return address;
}
@Override
public String getDisplayResult() {
StringBuilder result = new StringBuilder(name);
StringBuffer result = new StringBuffer(name);
maybeAppend(email, result);
maybeAppend(address, result);
for (int i = 0; i < phoneNumbers.length; i++) {

View file

@ -16,16 +16,13 @@
package com.google.zxing.client.result;
import java.net.URI;
import java.net.URISyntaxException;
/**
* @author srowen@google.com (Sean Owen)
*/
public final class BookmarkDoCoMoResult extends AbstractDoCoMoResult {
private final String title;
private final URI uri;
private final String uri;
public BookmarkDoCoMoResult(String rawText) {
super(ParsedReaderResultType.BOOKMARK);
@ -34,25 +31,23 @@ public final class BookmarkDoCoMoResult extends AbstractDoCoMoResult {
}
title = matchSinglePrefixedField("TITLE:", rawText);
String uriString = matchRequiredPrefixedField("URL:", rawText)[0];
try {
this.uri = new URI(uriString);
} catch (URISyntaxException urise) {
throw new IllegalArgumentException(urise.toString());
if (!URIParsedResult.isBasicallyValidURI(uriString)) {
throw new IllegalArgumentException("Invalid URI: " + uriString);
}
uri = uriString;
}
public String getTitle() {
return title;
}
public URI getURI() {
public String getURI() {
return uri;
}
@Override
public String getDisplayResult() {
if (title == null) {
return uri.toString();
return uri;
} else {
return title + '\n' + uri;
}

View file

@ -0,0 +1,50 @@
/*
* Copyright 2007 Google Inc.
*
* 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.
*/
package com.google.zxing.client.result;
/**
* Represents a result that encodes an e-mail address, either as a plain address
* like "joe@example.org" or a mailto: URL like "mailto:joe@example.org".
*
* @author srowen@google.com (Sean Owen)
*/
public final class EmailAddressResult extends AbstractDoCoMoResult {
private final String emailAddress;
public EmailAddressResult(String rawText) {
super(ParsedReaderResultType.EMAIL_ADDRESS);
if (rawText.startsWith("mailto:")) {
// If it starts with mailto:, assume it is definitely trying to be an email address
emailAddress = rawText.substring(7);
} else {
if (!EmailDoCoMoResult.isBasicallyValidEmailAddress(rawText)) {
throw new IllegalArgumentException("Invalid email address: " + rawText);
}
emailAddress = rawText;
}
}
public String getEmailAddress() {
return emailAddress;
}
public String getDisplayResult() {
return emailAddress;
}
}

View file

@ -16,9 +16,6 @@
package com.google.zxing.client.result;
import java.net.URI;
import java.net.URISyntaxException;
/**
* Implements the "MATMSG" email message entry format.
*
@ -31,7 +28,6 @@ public final class EmailDoCoMoResult extends AbstractDoCoMoResult {
private final String to;
private final String subject;
private final String body;
private final URI mailtoURI;
public EmailDoCoMoResult(String rawText) {
super(ParsedReaderResultType.EMAIL);
@ -39,10 +35,8 @@ public final class EmailDoCoMoResult extends AbstractDoCoMoResult {
throw new IllegalArgumentException("Does not begin with MATMSG");
}
to = matchRequiredPrefixedField("TO:", rawText)[0];
try {
mailtoURI = new URI("mailto:" + to);
} catch (URISyntaxException urise) {
throw new IllegalArgumentException(urise.toString());
if (!isBasicallyValidEmailAddress(to)) {
throw new IllegalArgumentException("Invalid email address: " + to);
}
subject = matchSinglePrefixedField("SUB:", rawText);
body = matchSinglePrefixedField("BODY:", rawText);
@ -52,10 +46,6 @@ public final class EmailDoCoMoResult extends AbstractDoCoMoResult {
return to;
}
public URI getMailtoURI() {
return mailtoURI;
}
public String getSubject() {
return subject;
}
@ -64,12 +54,22 @@ public final class EmailDoCoMoResult extends AbstractDoCoMoResult {
return body;
}
@Override
public String getDisplayResult() {
StringBuilder result = new StringBuilder(to);
StringBuffer result = new StringBuffer(to);
maybeAppend(subject, result);
maybeAppend(body, result);
return result.toString();
}
/**
* This implements only the most basic checking for an email address's validity -- that it contains
* an '@' and a '.' somewhere after that, and that it contains no space.
* We want to generally be lenient here since this class is only intended to encapsulate what's
* in a barcode, not "judge" it.
*/
static boolean isBasicallyValidEmailAddress(String email) {
int atIndex = email.indexOf('@');
return atIndex >= 0 && email.indexOf('.') > atIndex && email.indexOf(' ') < 0;
}
}

View file

@ -16,9 +16,6 @@
package com.google.zxing.client.result;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/**
* @author srowen@google.com (Sean Owen)
*/
@ -37,30 +34,42 @@ public abstract class ParsedReaderResult {
public abstract String getDisplayResult();
public static ParsedReaderResult parseReaderResult(String rawText) {
for (ParsedReaderResultType type : ParsedReaderResultType.values()) {
Class<? extends ParsedReaderResult> resultClass = type.getResultClass();
try {
Constructor<? extends ParsedReaderResult> constructor =
resultClass.getConstructor(String.class);
return constructor.newInstance(rawText);
} catch (InvocationTargetException ite) {
Throwable cause = ite.getCause();
if (cause instanceof IllegalArgumentException) {
continue;
}
throw new RuntimeException(cause);
} catch (NoSuchMethodException nsme) {
throw new RuntimeException(nsme);
} catch (IllegalAccessException iae) {
throw new RuntimeException(iae);
} catch (InstantiationException ie) {
throw new RuntimeException(ie);
}
// This is a bit messy, but given limited options in MIDP / CLDC, this may well be the simplest
// way to go about this. For example, we have no reflection available, really.
// Order is important here.
try {
return new BookmarkDoCoMoResult(rawText);
} catch (IllegalArgumentException iae) {
// continue
}
throw new IllegalStateException("TextResult should always work");
try {
return new AddressBookDoCoMoResult(rawText);
} catch (IllegalArgumentException iae) {
// continue
}
try {
return new EmailDoCoMoResult(rawText);
} catch (IllegalArgumentException iae) {
// continue
}
try {
return new EmailAddressResult(rawText);
} catch (IllegalArgumentException iae) {
// continue
}
try {
return new URIParsedResult(rawText);
} catch (IllegalArgumentException iae) {
// continue
}
try {
return new UPCParsedResult(rawText);
} catch (IllegalArgumentException iae) {
// continue
}
return new TextParsedResult(rawText);
}
@Override
public String toString() {
return getDisplayResult();
}

View file

@ -0,0 +1,39 @@
/*
* Copyright 2007 Google Inc.
*
* 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.
*/
package com.google.zxing.client.result;
/**
* Represents the type of data encoded by a barcode -- from plain text, to a
* URI, to an e-mail address, etc.
*
* @author srowen@google.com (Sean Owen)
*/
public final class ParsedReaderResultType {
public static final ParsedReaderResultType BOOKMARK = new ParsedReaderResultType();
public static final ParsedReaderResultType ADDRESSBOOK = new ParsedReaderResultType();
public static final ParsedReaderResultType EMAIL = new ParsedReaderResultType();
public static final ParsedReaderResultType EMAIL_ADDRESS = new ParsedReaderResultType();
public static final ParsedReaderResultType UPC = new ParsedReaderResultType();
public static final ParsedReaderResultType URI = new ParsedReaderResultType();
public static final ParsedReaderResultType TEXT = new ParsedReaderResultType();
private ParsedReaderResultType() {
// do nothing
}
}

View file

@ -32,7 +32,6 @@ public final class TextParsedResult extends ParsedReaderResult {
return text;
}
@Override
public String getDisplayResult() {
return text;
}

View file

@ -42,7 +42,6 @@ public final class UPCParsedResult extends ParsedReaderResult {
return upc;
}
@Override
public String getDisplayResult() {
return upc;
}

View file

@ -0,0 +1,73 @@
/*
* Copyright 2007 Google Inc.
*
* 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.
*/
package com.google.zxing.client.result;
/**
* @author srowen@google.com (Sean Owen)
*/
public final class URIParsedResult extends ParsedReaderResult {
private final String uri;
public URIParsedResult(String rawText) {
super(ParsedReaderResultType.URI);
if (!isBasicallyValidURI(rawText)) {
throw new IllegalArgumentException("Invalid URI: " + rawText);
}
uri = massagePossibleURI(rawText);
}
public String getURI() {
return uri;
}
public String getDisplayResult() {
return uri;
}
/**
* Transforms a string that possibly represents a URI into something more proper, by adding or canonicalizing
* the protocol.
*/
static String massagePossibleURI(String uri) {
// Take off leading "URL:" if present
if (uri.startsWith("URL:")) {
uri = uri.substring(4);
}
int protocolEnd = uri.indexOf(':');
if (protocolEnd < 0) {
// No protocol, assume http
uri = "http://" + uri;
} else {
// Lowercase protocol to avoid problems
uri = uri.substring(0, protocolEnd).toLowerCase() + uri.substring(protocolEnd);
// TODO this logic isn't quite right for URIs like "example.org:443/foo"
}
return uri;
}
/**
* Determines whether a string is not obviously not a URI. This implements crude checks; this class does not
* intend to strictly check URIs as its only function is to represent what is in a barcode, but, it does
* need to know when a string is obviously not a URI.
*/
static boolean isBasicallyValidURI(String uri) {
return uri.indexOf(' ') < 0 && (uri.indexOf(':') >= 0 || uri.indexOf('.') >= 0);
}
}

View file

@ -0,0 +1,87 @@
/*
* Copyright 2007 Google Inc.
*
* 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.
*/
package com.google.zxing.client.result;
import junit.framework.TestCase;
/**
* Tests {@link ParsedReaderResult}.
*
* @author srowen@google.com (Sean Owen)
*/
public final class ParsedReaderResultTestCase extends TestCase {
public void testTextType() {
doTestResult("foo", ParsedReaderResultType.TEXT);
doTestResult("", ParsedReaderResultType.TEXT);
doTestResult("This is a test", ParsedReaderResultType.TEXT);
}
public void testBookmarkType() {
doTestResult("MEBKM:URL:google.com;;", ParsedReaderResultType.BOOKMARK);
doTestResult("MEBKM:URL:google.com;TITLE:Google;;", ParsedReaderResultType.BOOKMARK);
doTestResult("MEBKM:TITLE:Google;URL:google.com;;", ParsedReaderResultType.BOOKMARK);
doTestResult("MEBKM:URL:http://google.com;;", ParsedReaderResultType.BOOKMARK);
doTestResult("MEBKM:URL:HTTPS://google.com;;", ParsedReaderResultType.BOOKMARK);
}
public void testEmailType() {
doTestResult("MATMSG:TO:srowen@example.org;;", ParsedReaderResultType.EMAIL);
doTestResult("MATMSG:TO:srowen@example.org;SUB:Stuff;;", ParsedReaderResultType.EMAIL);
doTestResult("MATMSG:TO:srowen@example.org;SUB:Stuff;BODY:This is some text;;", ParsedReaderResultType.EMAIL);
doTestResult("MATMSG:SUB:Stuff;BODY:This is some text;TO:srowen@example.org;;", ParsedReaderResultType.EMAIL);
doTestResult("TO:srowen@example.org;SUB:Stuff;BODY:This is some text;;", ParsedReaderResultType.TEXT);
}
public void testEmailAddressType() {
doTestResult("srowen@example.org", ParsedReaderResultType.EMAIL_ADDRESS);
doTestResult("mailto:srowen@example.org", ParsedReaderResultType.EMAIL_ADDRESS);
doTestResult("srowen@example", ParsedReaderResultType.TEXT);
doTestResult("srowen", ParsedReaderResultType.TEXT);
doTestResult("Let's meet @ 2", ParsedReaderResultType.TEXT);
}
public void testAddressBookType() {
doTestResult("MECARD:N:Sean Owen;;", ParsedReaderResultType.ADDRESSBOOK);
doTestResult("MECARD:TEL:+12125551212;N:Sean Owen;;", ParsedReaderResultType.ADDRESSBOOK);
doTestResult("MECARD:TEL:+12125551212;N:Sean Owen;URL:google.com;;", ParsedReaderResultType.ADDRESSBOOK);
doTestResult("TEL:+12125551212;N:Sean Owen;;", ParsedReaderResultType.TEXT);
}
public void testUPC() {
doTestResult("123456789012", ParsedReaderResultType.UPC);
doTestResult("1234567890123", ParsedReaderResultType.UPC);
doTestResult("12345678901", ParsedReaderResultType.TEXT);
}
public void testURI() {
doTestResult("http://google.com", ParsedReaderResultType.URI);
doTestResult("google.com", ParsedReaderResultType.URI);
doTestResult("https://google.com", ParsedReaderResultType.URI);
doTestResult("HTTP://google.com", ParsedReaderResultType.URI);
doTestResult("http://google.com/foobar", ParsedReaderResultType.URI);
doTestResult("https://google.com:443/foobar", ParsedReaderResultType.URI);
doTestResult("google.com:443/foobar", ParsedReaderResultType.URI);
}
private static void doTestResult(String text, ParsedReaderResultType type) {
ParsedReaderResult result = ParsedReaderResult.parseReaderResult(text);
assertNotNull(result);
assertEquals(type, result.getType());
}
}

View file

@ -16,6 +16,12 @@
package com.google.zxing.client.j2me;
import com.google.zxing.client.result.BookmarkDoCoMoResult;
import com.google.zxing.client.result.EmailDoCoMoResult;
import com.google.zxing.client.result.ParsedReaderResult;
import com.google.zxing.client.result.ParsedReaderResultType;
import com.google.zxing.client.result.URIParsedResult;
import javax.microedition.io.ConnectionNotFoundException;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
@ -144,52 +150,18 @@ public final class ZXingMIDlet extends MIDlet {
display.setCurrent(alert, canvas);
}
/// TODO this whole bit needs to be merged with the code in core-ext -- this is messy and duplicative
void handleDecodedText(String text) {
// This is a crude imitation of the code found in module core-ext, which handles the contents
// in a more sophisticated way. It can't be accessed from JavaME just yet because it relies
// on URL parsing routines in java.net. This should be somehow worked around: TODO
// For now, detect URLs in a simple way, and treat everything else as text
if (text.startsWith("http://") || text.startsWith("https://")) {
showOpenURL(text);
} else if (text.startsWith("HTTP://") || text.startsWith("HTTPS://")) {
showOpenURL(decapitalizeProtocol(text));
} else if (text.startsWith("URL:")) {
showOpenURL(decapitalizeProtocol(text.substring(4)));
} else if (text.startsWith("MEBKM:")) {
int urlIndex = text.indexOf("URL:", 6);
if (urlIndex >= 6) {
String url = text.substring( urlIndex + 4);
int semicolon = url.indexOf((int) ';');
if (semicolon >= 0) {
url = url.substring(0, semicolon);
}
showOpenURL(decapitalizeProtocol(url));
} else {
showAlert("Barcode detected", text);
}
} else if (maybeURLWithoutScheme(text)) {
showOpenURL("http://" + text);
ParsedReaderResult result = ParsedReaderResult.parseReaderResult(text);
ParsedReaderResultType type = result.getType();
if (type.equals(ParsedReaderResultType.URI)) {
showOpenURL(((URIParsedResult) result).getURI());
} else if (type.equals(ParsedReaderResultType.BOOKMARK)) {
showOpenURL(((BookmarkDoCoMoResult) result).getURI());
} else if (type.equals(ParsedReaderResultType.EMAIL)) {
showOpenURL(((EmailDoCoMoResult) result).getMailtoURI());
} else {
showAlert("Barcode detected", text);
showAlert("Barcode detected", result.getDisplayResult());
}
}
private static String decapitalizeProtocol(String url) {
int protocolEnd = url.indexOf("://");
if (protocolEnd >= 0) {
return url.substring(0, protocolEnd).toLowerCase() + url.substring(protocolEnd);
} else {
return url;
}
}
/**
* Crudely guesses that a string may represent a URL if it has a '.' and no spaces.
*/
private static boolean maybeURLWithoutScheme(String text) {
return text.indexOf((int) '.') >= 0 && text.indexOf((int) ' ') < 0;
}
}

View file

@ -33,7 +33,6 @@
deprecation="true">
<classpath>
<pathelement location="../core/core.jar"/>
<pathelement location="../core-ext/core-ext.jar"/>
</classpath>
</javac>
<jar jarfile="javase.jar" basedir="build" level="9"/>