You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2015/04/17 18:05:31 UTC
[11/50] [abbrv] zest-qi4j git commit: QI-318 Removed org.json package
from SPI, using dependency instead
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/e428fa92/core/spi/src/main/java/org/json/JSONWriter.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/json/JSONWriter.java b/core/spi/src/main/java/org/json/JSONWriter.java
deleted file mode 100644
index c1328c0..0000000
--- a/core/spi/src/main/java/org/json/JSONWriter.java
+++ /dev/null
@@ -1,429 +0,0 @@
-/*
- * Copyright (c) 2009, Rickard Öberg. All Rights Reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
- * 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.json;
-
-import java.io.IOException;
-import java.io.Writer;
-
-/*
-Copyright (c) 2006 JSON.org
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-The Software shall be used for Good, not Evil.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-/**
- * JSONWriter provides a quick and convenient way of producing JSON text.
- * The texts produced strictly conform to JSON syntax rules. No whitespace is
- * added, so the results are ready for transmission or storage. Each instance of
- * JSONWriter can produce one JSON text.
- * <p/>
- * A JSONWriter instance provides a <code>value</code> method for appending
- * values to the
- * text, and a <code>key</code>
- * method for adding keys before values in objects. There are <code>array</code>
- * and <code>endArray</code> methods that make and bound array values, and
- * <code>object</code> and <code>endObject</code> methods which make and bound
- * object values. All of these methods return the JSONWriter instance,
- * permitting a cascade style. For example, <pre>
- * new JSONWriter(myWriter)
- * .object()
- * .key("JSON")
- * .value("Hello, World!")
- * .endObject();</pre> which writes <pre>
- * {"JSON":"Hello, World!"}</pre>
- * <p/>
- * The first method called must be <code>array</code> or <code>object</code>.
- * There are no methods for adding commas or colons. JSONWriter adds them for
- * you. Objects and arrays can be nested up to 20 levels deep.
- * <p/>
- * This can sometimes be easier than using a JSONObject to build a string.
- */
-public class JSONWriter
-{
- private static final int maxdepth = 20;
-
- /**
- * The comma flag determines if a comma should be output before the next
- * value.
- */
- private boolean comma;
-
- /**
- * The current mode. Values:
- * 'a' (array),
- * 'd' (done),
- * 'i' (initial),
- * 'k' (key),
- * 'o' (object).
- */
- protected char mode;
-
- /**
- * The object/array stack.
- */
- private JSONObject stack[];
-
- /**
- * The stack top index. A value of 0 indicates that the stack is empty.
- */
- private int top;
-
- /**
- * The writer that will receive the output.
- */
- protected Writer writer;
-
- /**
- * Make a fresh JSONWriter. It can be used to build one JSON text.
- */
- public JSONWriter( Writer w )
- {
- this.comma = false;
- this.mode = 'i';
- this.stack = new JSONObject[ maxdepth ];
- this.top = 0;
- this.writer = w;
- }
-
- /**
- * Append a value.
- *
- * @param s A string value.
- *
- * @return this
- *
- * @throws JSONException If the value is out of sequence.
- */
- private JSONWriter append( String s )
- throws JSONException
- {
- if( s == null )
- {
- throw new JSONException( "Null pointer" );
- }
- if( this.mode == 'o' || this.mode == 'a' )
- {
- try
- {
- if( this.comma && this.mode == 'a' )
- {
- this.writer.write( ',' );
- }
- this.writer.write( s );
- }
- catch( IOException e )
- {
- throw new JSONException( e );
- }
- if( this.mode == 'o' )
- {
- this.mode = 'k';
- }
- this.comma = true;
- return this;
- }
- throw new JSONException( "Value out of sequence." );
- }
-
- /**
- * Begin appending a new array. All values until the balancing
- * <code>endArray</code> will be appended to this array. The
- * <code>endArray</code> method must be called to mark the array's end.
- *
- * @return this
- *
- * @throws JSONException If the nesting is too deep, or if the object is
- * started in the wrong place (for example as a key or after the end of the
- * outermost array or object).
- */
- public JSONWriter array()
- throws JSONException
- {
- if( this.mode == 'i' || this.mode == 'o' || this.mode == 'a' )
- {
- this.push( null );
- this.append( "[" );
- this.comma = false;
- return this;
- }
- throw new JSONException( "Misplaced array." );
- }
-
- /**
- * End something.
- *
- * @param m Mode
- * @param c Closing character
- *
- * @return this
- *
- * @throws JSONException If unbalanced.
- */
- private JSONWriter end( char m, char c )
- throws JSONException
- {
- if( this.mode != m )
- {
- throw new JSONException( m == 'o' ? "Misplaced endObject." :
- "Misplaced endArray." );
- }
- this.pop( m );
- try
- {
- this.writer.write( c );
- }
- catch( IOException e )
- {
- throw new JSONException( e );
- }
- this.comma = true;
- return this;
- }
-
- /**
- * End an array. This method most be called to balance calls to
- * <code>array</code>.
- *
- * @return this
- *
- * @throws JSONException If incorrectly nested.
- */
- public JSONWriter endArray()
- throws JSONException
- {
- return this.end( 'a', ']' );
- }
-
- /**
- * End an object. This method most be called to balance calls to
- * <code>object</code>.
- *
- * @return this
- *
- * @throws JSONException If incorrectly nested.
- */
- public JSONWriter endObject()
- throws JSONException
- {
- return this.end( 'k', '}' );
- }
-
- /**
- * Append a key. The key will be associated with the next value. In an
- * object, every value must be preceded by a key.
- *
- * @param s A key string.
- *
- * @return this
- *
- * @throws JSONException If the key is out of place. For example, keys
- * do not belong in arrays or if the key is null.
- */
- public JSONWriter key( String s )
- throws JSONException
- {
- if( s == null )
- {
- throw new JSONException( "Null key." );
- }
- if( this.mode == 'k' )
- {
- try
- {
- stack[ top - 1 ].putOnce( s, Boolean.TRUE );
- if( this.comma )
- {
- this.writer.write( ',' );
- }
- this.writer.write( JSONObject.quote( s ) );
- this.writer.write( ':' );
- this.comma = false;
- this.mode = 'o';
- return this;
- }
- catch( IOException e )
- {
- throw new JSONException( e );
- }
- }
- throw new JSONException( "Misplaced key." );
- }
-
- /**
- * Begin appending a new object. All keys and values until the balancing
- * <code>endObject</code> will be appended to this object. The
- * <code>endObject</code> method must be called to mark the object's end.
- *
- * @return this
- *
- * @throws JSONException If the nesting is too deep, or if the object is
- * started in the wrong place (for example as a key or after the end of the
- * outermost array or object).
- */
- public JSONWriter object()
- throws JSONException
- {
- if( this.mode == 'i' )
- {
- this.mode = 'o';
- }
- if( this.mode == 'o' || this.mode == 'a' )
- {
- this.append( "{" );
- this.push( new JSONObject() );
- this.comma = false;
- return this;
- }
- throw new JSONException( "Misplaced object." );
- }
-
- /**
- * Pop an array or object scope.
- *
- * @param c The scope to close.
- *
- * @throws JSONException If nesting is wrong.
- */
- private void pop( char c )
- throws JSONException
- {
- if( this.top <= 0 )
- {
- throw new JSONException( "Nesting error." );
- }
- char m = this.stack[ this.top - 1 ] == null ? 'a' : 'k';
- if( m != c )
- {
- throw new JSONException( "Nesting error." );
- }
- this.top -= 1;
- this.mode = this.top == 0 ? 'd' : this.stack[ this.top - 1 ] == null ? 'a' : 'k';
- }
-
- /**
- * Push an array or object scope.
- *
- * @param jo The scope to open.
- *
- * @throws JSONException If nesting is too deep.
- */
- private void push( JSONObject jo )
- throws JSONException
- {
- if( this.top >= maxdepth )
- {
- throw new JSONException( "Nesting too deep." );
- }
- this.stack[ this.top ] = jo;
- this.mode = jo == null ? 'a' : 'k';
- this.top += 1;
- }
-
- /**
- * Append either the value <code>true</code> or the value
- * <code>false</code>.
- *
- * @param b A boolean.
- *
- * @return this
- *
- * @throws JSONException
- */
- public JSONWriter value( boolean b )
- throws JSONException
- {
- return this.append( b ? "true" : "false" );
- }
-
- /**
- * Append a double value.
- *
- * @param d A double.
- *
- * @return this
- *
- * @throws JSONException If the number is not finite.
- */
- public JSONWriter value( double d )
- throws JSONException
- {
- return this.value( new Double( d ) );
- }
-
- /**
- * Append a long value.
- *
- * @param l A long.
- *
- * @return this
- *
- * @throws JSONException
- */
- public JSONWriter value( long l )
- throws JSONException
- {
- return this.append( Long.toString( l ) );
- }
-
- /**
- * Append an object value.
- *
- * @param o The object to append. It can be null, or a Boolean, Number,
- * String, JSONObject, or JSONArray, or an object with a toJSONString()
- * method.
- *
- * @return this
- *
- * @throws JSONException If the value is out of sequence.
- */
- public JSONWriter value( Object o )
- throws JSONException
- {
- return this.append( JSONObject.valueToString( o ) );
- }
-
- /**
- * Append JSON formatted string as-is
- *
- * @param json
- *
- * @return
- *
- * @throws JSONException
- */
- public JSONWriter json( String json )
- throws JSONException
- {
- return this.append( json );
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/e428fa92/core/spi/src/main/java/org/json/package.html
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/json/package.html b/core/spi/src/main/java/org/json/package.html
deleted file mode 100644
index 6dc0ff7..0000000
--- a/core/spi/src/main/java/org/json/package.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
- <body>
- <h2>JSON in Java.</h2>
- <p>
- See <a href="http://www.json.org/java/">json.org/java</a>.
- </p>
- </body>
-</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/e428fa92/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationState.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationState.java b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationState.java
index 63413e7..9979ba5 100644
--- a/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationState.java
+++ b/core/spi/src/main/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationState.java
@@ -11,7 +11,6 @@
* limitations under the License.
*
*/
-
package org.qi4j.spi.entitystore.helpers;
import java.util.Iterator;
@@ -23,11 +22,13 @@ import org.qi4j.spi.entity.ManyAssociationState;
import org.qi4j.spi.entitystore.EntityStoreException;
/**
- * JSON implementation of ManyAssociationState. Backed by JSONArray.
+ * JSON implementation of ManyAssociationState.
+ * <p>Backed by a JSONArray.</p>
*/
public final class JSONManyAssociationState
implements ManyAssociationState
{
+
private JSONEntityState entityState;
private JSONArray references;
@@ -46,21 +47,7 @@ public final class JSONManyAssociationState
@Override
public boolean contains( EntityReference entityReference )
{
- try
- {
- for( int i = 0; i < references.length(); i++ )
- {
- if( references.get( i ).equals( entityReference.identity() ) )
- {
- return true;
- }
- }
- return false;
- }
- catch( JSONException e )
- {
- throw new EntityStoreException( e );
- }
+ return indexOfReference( entityReference.identity() ) != -1;
}
@Override
@@ -68,12 +55,12 @@ public final class JSONManyAssociationState
{
try
{
- if( contains( entityReference ) )
+ if( indexOfReference( entityReference.identity() ) != -1 )
{
return false;
}
entityState.cloneStateIfGlobalStateLoaded();
- references.insert( idx, entityReference.identity() );
+ insertReference( idx, entityReference.identity() );
entityState.markUpdated();
return true;
}
@@ -86,24 +73,15 @@ public final class JSONManyAssociationState
@Override
public boolean remove( EntityReference entityReference )
{
- try
+ int refIndex = indexOfReference( entityReference.identity() );
+ if( refIndex != -1 )
{
- for( int i = 0; i < references.length(); i++ )
- {
- if( references.get( i ).equals( entityReference.identity() ) )
- {
- entityState.cloneStateIfGlobalStateLoaded();
- references.remove( i );
- entityState.markUpdated();
- return true;
- }
- }
- return false;
- }
- catch( JSONException e )
- {
- throw new EntityStoreException( e );
+ entityState.cloneStateIfGlobalStateLoaded();
+ references.remove( refIndex );
+ entityState.markUpdated();
+ return true;
}
+ return false;
}
@Override
@@ -124,7 +102,7 @@ public final class JSONManyAssociationState
{
return new Iterator<EntityReference>()
{
- int idx = 0;
+ private int idx = 0;
@Override
public boolean hasNext()
@@ -154,4 +132,53 @@ public final class JSONManyAssociationState
}
};
}
+
+ @Override
+ public String toString()
+ {
+ return references.toString();
+ }
+
+ private int indexOfReference( Object item )
+ {
+ for( int idx = 0; idx < references.length(); idx++ )
+ {
+ if( item.equals( references.opt( idx ) ) )
+ {
+ return idx;
+ }
+ }
+ return -1;
+ }
+
+ private void insertReference( int insert, Object item )
+ throws JSONException
+ {
+ if( insert < 0 || insert > references.length() )
+ {
+ throw new JSONException( "JSONArray[" + insert + "] is out of bounds." );
+ }
+ if( insert == references.length() )
+ {
+ // append
+ references.put( item );
+ }
+ else
+ {
+ // insert (copy/insert/apply)
+ JSONArray output = new JSONArray();
+ for( int idx = 0; idx < references.length(); idx++ )
+ {
+ if( idx == insert )
+ {
+ output.put( item );
+ }
+ output.put( references.opt( idx ) );
+ }
+ for( int idx = 0; idx < output.length(); idx++ )
+ {
+ references.put( idx, output.opt( idx ) );
+ }
+ }
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/e428fa92/core/spi/src/test/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationStateTest.java
----------------------------------------------------------------------
diff --git a/core/spi/src/test/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationStateTest.java b/core/spi/src/test/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationStateTest.java
new file mode 100644
index 0000000..3de0647
--- /dev/null
+++ b/core/spi/src/test/java/org/qi4j/spi/entitystore/helpers/JSONManyAssociationStateTest.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (c) 2013, Paul Merlin. All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ *
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.qi4j.spi.entitystore.helpers;
+
+import java.util.List;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.junit.Test;
+import org.qi4j.api.entity.EntityReference;
+import org.qi4j.functional.Function;
+import org.qi4j.spi.entity.EntityStatus;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertThat;
+import static org.qi4j.functional.Iterables.map;
+import static org.qi4j.functional.Iterables.toList;
+
+public class JSONManyAssociationStateTest
+{
+
+ @Test
+ public void givenEmptyJSONManyAssociationStateWhenAddingTwoRefsAtZeroIndexExpectCorrectOrder()
+ throws JSONException
+ {
+ // Fake JSONManyAssociationState
+ JSONObject state = new JSONObject();
+ state.put( JSONEntityState.JSON_KEY_PROPERTIES, new JSONObject() );
+ state.put( JSONEntityState.JSON_KEY_ASSOCIATIONS, new JSONObject() );
+ state.put( JSONEntityState.JSON_KEY_MANYASSOCIATIONS, new JSONObject() );
+ JSONEntityState entityState = new JSONEntityState( null,
+ null,
+ "0",
+ System.currentTimeMillis(),
+ EntityReference.parseEntityReference( "123" ),
+ EntityStatus.NEW,
+ null,
+ state );
+ JSONManyAssociationState jsonState = new JSONManyAssociationState( entityState, new JSONArray() );
+
+ jsonState.add( 0, EntityReference.parseEntityReference( "first" ) );
+ jsonState.add( 0, EntityReference.parseEntityReference( "second" ) );
+
+ assertThat( jsonState.count(), equalTo( 2 ) );
+ }
+
+ @Test
+ public void givenJSONManyAssociationStateWhenChangingReferencesExpectCorrectBehavior()
+ throws JSONException
+ {
+ // Fake JSONManyAssociationState
+ JSONObject state = new JSONObject();
+ state.put( JSONEntityState.JSON_KEY_PROPERTIES, new JSONObject() );
+ state.put( JSONEntityState.JSON_KEY_ASSOCIATIONS, new JSONObject() );
+ state.put( JSONEntityState.JSON_KEY_MANYASSOCIATIONS, new JSONObject() );
+ JSONEntityState entityState = new JSONEntityState( null,
+ null,
+ "0",
+ System.currentTimeMillis(),
+ EntityReference.parseEntityReference( "123" ),
+ EntityStatus.NEW,
+ null,
+ state );
+ JSONManyAssociationState jsonState = new JSONManyAssociationState( entityState, new JSONArray() );
+
+ assertThat( jsonState.contains( EntityReference.parseEntityReference( "NOT_PRESENT" ) ), is( false ) );
+
+ jsonState.add( 0, EntityReference.parseEntityReference( "0" ) );
+ jsonState.add( 1, EntityReference.parseEntityReference( "1" ) );
+ jsonState.add( 2, EntityReference.parseEntityReference( "2" ) );
+
+ assertThat( jsonState.contains( EntityReference.parseEntityReference( "1" ) ), is( true ) );
+
+ assertThat( jsonState.get( 0 ).identity(), equalTo( "0" ) );
+ assertThat( jsonState.get( 1 ).identity(), equalTo( "1" ) );
+ assertThat( jsonState.get( 2 ).identity(), equalTo( "2" ) );
+
+ assertThat( jsonState.count(), equalTo( 3 ) );
+
+ jsonState.remove( EntityReference.parseEntityReference( "1" ) );
+
+ assertThat( jsonState.count(), equalTo( 2 ) );
+ assertThat( jsonState.contains( EntityReference.parseEntityReference( "1" ) ), is( false ) );
+ assertThat( jsonState.get( 0 ).identity(), equalTo( "0" ) );
+ assertThat( jsonState.get( 1 ).identity(), equalTo( "2" ) );
+
+ jsonState.add( 2, EntityReference.parseEntityReference( "1" ) );
+
+ assertThat( jsonState.count(), equalTo( 3 ) );
+
+ jsonState.add( 0, EntityReference.parseEntityReference( "A" ) );
+ jsonState.add( 0, EntityReference.parseEntityReference( "B" ) );
+ jsonState.add( 0, EntityReference.parseEntityReference( "C" ) );
+
+ assertThat( jsonState.count(), equalTo( 6 ) );
+
+ assertThat( jsonState.get( 0 ).identity(), equalTo( "C" ) );
+ assertThat( jsonState.get( 1 ).identity(), equalTo( "B" ) );
+ assertThat( jsonState.get( 2 ).identity(), equalTo( "A" ) );
+
+ assertThat( jsonState.contains( EntityReference.parseEntityReference( "C" ) ), is( true ) );
+ assertThat( jsonState.contains( EntityReference.parseEntityReference( "B" ) ), is( true ) );
+ assertThat( jsonState.contains( EntityReference.parseEntityReference( "A" ) ), is( true ) );
+ assertThat( jsonState.contains( EntityReference.parseEntityReference( "0" ) ), is( true ) );
+ assertThat( jsonState.contains( EntityReference.parseEntityReference( "2" ) ), is( true ) );
+ assertThat( jsonState.contains( EntityReference.parseEntityReference( "1" ) ), is( true ) );
+
+ List<String> refList = toList( map( new Function<EntityReference, String>()
+ {
+ @Override
+ public String map( EntityReference from )
+ {
+ return from.identity();
+ }
+ }, jsonState ) );
+ assertThat( refList.isEmpty(), is( false ) );
+ assertArrayEquals( new String[]
+ {
+ "C", "B", "A", "0", "2", "1"
+ }, refList.toArray() );
+ }
+}
http://git-wip-us.apache.org/repos/asf/zest-qi4j/blob/e428fa92/libraries.gradle
----------------------------------------------------------------------
diff --git a/libraries.gradle b/libraries.gradle
index 2ac02fa..946563d 100644
--- a/libraries.gradle
+++ b/libraries.gradle
@@ -40,6 +40,7 @@ def mongodbVersion = '2.9.3'
def mysqlVersion = '5.1.21'
def neoVersion = '1.3' // 1.8 exists
def neoIndexVersion = '1.3-1.3.M01' // Do not exist anymore!
+def orgJsonVersion = '20130213'
def osgiVersion = '4.2.0' // 4.3.0 - Fails to compile!
def pdfboxVersion = '1.7.1'
def postgresqlVersion = '9.1-901-1.jdbc4'
@@ -101,6 +102,9 @@ rootProject.ext {
jcl_api: 'commons-logging:commons-logging-api:99.0-does-not-exist', //ensure it is never used.
jcl: 'commons-logging:commons-logging:99.0-does-not-exist', // ensure it is never used.
+ // org.json
+ org_json: "org.codeartisans:org.json:$orgJsonVersion",
+
// Restlet
restlet: [
"org.restlet.jee:org.restlet:$restletVersion",