On 11 May 2011, at 19:19, Hasan Hasan wrote:

> Hi all,
> 
> I fully support the process described by Reto
> 
> Best regards
> Hasan
> 
> On Wed, May 11, 2011 at 6:52 PM, Reto Bachmann-Gmuer 
> <[email protected]> wrote:
> Hi Henry
> 
> EasyGraph seems completly unrelated to CLEREZZA-511

Well not quite. EasyGraph has automatic conversations which are listed in
CLEREZZA-511. Here a some 

implicit def string2lit(str: String) = new PlainLiteralScala(str) 
implicit def date2lit(date: Date) = DATE_CONVERTER.createTypedLiteral(date) 
implicit def int2lit(int: Int) = INTEGER_CONVERTER.createTypedLiteral(int) 

Now of course, since I asked by opening the issue and you preferred not to 
use the converters directly, I have followed your advice and not used those 
directly, 
but the method call instead. Seems like the discussion was fruitful.


> 
> For the rest of the commit I don't see what usefull change you think
> you made.

below you agree some where made.

> I see some code rearrengement and introduction of private
> fields with imho don't make things more readable but harder to
> maintain. I see that you added questions which I think belong on the
> mailing list and not in the code, some lobbying for the modularized
> literal factory and yes, I think I could agree with the TRUE/FALSE
> constants.

Ok. So that's useful then.

> I see no reason to make TypeConverter public.

Well it is quite easy to see that there are going to be a lot more type 
conversions  than you can list in your code. One can come up with 
new literal formats at the drop of a hat. So clearly people should be able
to open add new TypeConverters. 

But ok, one can open that in a new issue. And indeed I thought I had left
it private. I'll make it private again for the moment.

> 
> Please:
> - separate the patches for code-renicing from actual improvements
> (here the performance improvement)
> - associate patches to an issue from which the motivation for the
> patch can be deducted
> - for performance improvement: focus on bottle-necks that show up in
> the profiler, otherwise we might make the code no complicates without
> actual gain
> - post questions to the mailing list

I have not  found the list very responsive usually. Bug reports seem to work 
better
for a conversation. As you saw recently even posting attachements to the list is
difficult.

> - if adding todos to the code refer to the existing issue that would
> cover them, the "todo: create a subclass of TypedLiteral that contains
> the original value, then one would not need" could refer to
> CLEREZZA-423

Sounds like a good idea. I think it is good to have pointers going both ways.

> 
> I'm sorry for being pedantic, but I think that clerezza can only be a
> stable and manageable code base if we stick to the process and are a
> bit conservative on which patches we accept.

As long as we don't end up in a process nightmare. So of this patch I think
most of it is ok, just the public constructor is not. I'll fix that.

Thanks for reviewing.

Henry

> 
> Cheers,
> Reto
> 
> 
> 
> 
> On Wed, May 11, 2011 at 6:04 PM,  <[email protected]> wrote:
> > Author: bblfish
> > Date: Wed May 11 16:04:20 2011
> > New Revision: 1101934
> >
> > URL: http://svn.apache.org/viewvc?rev=1101934&view=rev
> > Log:
> > CLEREZZA-511: Was going to Allow access to single individual 
> > SimpleLiteralFactory converters but reto prefers not. Other changes are 
> > still useful
> >
> > Modified:
> >    
> > incubator/clerezza/trunk/parent/rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/SimpleLiteralFactory.java
> >    
> > incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/EasyGraph.scala
> >
> > Modified: 
> > incubator/clerezza/trunk/parent/rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/SimpleLiteralFactory.java
> > URL: 
> > http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/SimpleLiteralFactory.java?rev=1101934&r1=1101933&r2=1101934&view=diff
> > ==============================================================================
> > --- 
> > incubator/clerezza/trunk/parent/rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/SimpleLiteralFactory.java
> >  (original)
> > +++ 
> > incubator/clerezza/trunk/parent/rdf.core/src/main/java/org/apache/clerezza/rdf/core/impl/SimpleLiteralFactory.java
> >  Wed May 11 16:04:20 2011
> > @@ -55,8 +55,36 @@ public class SimpleLiteralFactory extend
> >
> >
> >        final private static Set<UriRef> decimalTypes = new 
> > HashSet<UriRef>();
> > +
> > +       final static private TypeConverter<byte[]> BYTE_ARRAY_CONVERTER = 
> > new ByteArrayConverter();
> > +       final static private TypeConverter<Boolean> BOOLEAN_CONVERTER = new 
> > BooleanConverter();
> > +       final static private TypeConverter<Date> DATE_CONVERTER = new 
> > DateConverter();
> > +       final static private TypeConverter<String> STRING_CONVERTER = new 
> > StringConverter();
> > +       final static private TypeConverter<Integer> INTEGER_CONVERTER = new 
> > IntegerConverter();
> > +       final static private TypeConverter<BigInteger> 
> > BIG_INTEGER_CONVERTER = new BigIntegerConverter();
> > +       final static private TypeConverter<Long> LONG_CONVERTER = new 
> > LongConverter();
> > +       final static private TypeConverter<Double> DOUBLE_CONVERTER = new 
> > DoubleConverter();
> > +       final static private TypeConverter<UriRef> URIREF_CONVERTER = new 
> > UriRefConverter();
> > +
> > +       final private static Map<Class<?>, TypeConverter<?>> 
> > typeConverterMap = new HashMap<Class<?>, TypeConverter<?>>();
> > +       final static Class<? extends byte[]> byteArrayType;
> > +
> >        static {
> > +               //what's this for?
> >                Collections.addAll(decimalTypes, xsdInteger, xsdInt, 
> > xsdByte, xsdShort);
> > +
> > +
> > +               byte[] byteArray = new byte[0];
> > +               byteArrayType = byteArray.getClass();
> > +               typeConverterMap.put(byteArrayType, BYTE_ARRAY_CONVERTER);
> > +               typeConverterMap.put(Date.class, DATE_CONVERTER);
> > +               typeConverterMap.put(Boolean.class, BOOLEAN_CONVERTER);
> > +               typeConverterMap.put(String.class, STRING_CONVERTER);
> > +               typeConverterMap.put(Integer.class, INTEGER_CONVERTER);
> > +               typeConverterMap.put(BigInteger.class, 
> > BIG_INTEGER_CONVERTER);
> > +               typeConverterMap.put(Long.class, LONG_CONVERTER);
> > +               typeConverterMap.put(Double.class, DOUBLE_CONVERTER);
> > +               typeConverterMap.put(UriRef.class, URIREF_CONVERTER);
> >        }
> >
> >        final private static UriRef xsdDouble =
> > @@ -64,13 +92,8 @@ public class SimpleLiteralFactory extend
> >        final private static UriRef xsdAnyURI =
> >                        new 
> > UriRef("http://www.w3.org/2001/XMLSchema#anyURI";);
> >
> > -       final static Class<? extends byte[]> byteArrayType;
> > -       static {
> > -               byte[] byteArray = new byte[0];
> > -               byteArrayType = byteArray.getClass();
> > -       }
> >
> > -       private static interface TypeConverter<T> {
> > +       public static interface TypeConverter<T> {
> >                TypedLiteral createTypedLiteral(T value);
> >                T createObject(TypedLiteral literal);
> >        }
> > @@ -125,15 +148,22 @@ public class SimpleLiteralFactory extend
> >
> >                private static final UriRef booleanUri =
> >                        new 
> > UriRef("http://www.w3.org/2001/XMLSchema#boolean";);
> > +               public static final TypedLiteralImpl TRUE = new 
> > TypedLiteralImpl("true", booleanUri);
> > +               public static final TypedLiteralImpl FALSE = new 
> > TypedLiteralImpl("false", booleanUri);
> >
> >                @Override
> >                public TypedLiteral createTypedLiteral(Boolean value) {
> > -                       return new TypedLiteralImpl(value.toString(), 
> > booleanUri);
> > +                       if (value) return TRUE;
> > +                       else return FALSE;
> >                }
> >
> > +               //todo: create a subclass of TypedLiteral that contains the 
> > original value, then one would not need
> > +               //to do these conversions
> >                @Override
> >                public Boolean createObject(TypedLiteral literal) {
> > -                       if (!literal.getDataType().equals(booleanUri)) {
> > +                       if (literal == TRUE) return true;
> > +                       else if (literal == FALSE) return false;
> > +                       else if (!literal.getDataType().equals(booleanUri)) 
> > {
> >                                throw new 
> > InvalidLiteralTypeException(Boolean.class, literal.getDataType());
> >                        }
> >                        return Boolean.valueOf(literal.getLexicalForm());
> > @@ -248,20 +278,6 @@ public class SimpleLiteralFactory extend
> >                }
> >        }
> >
> > -       final private static Map<Class<?>, TypeConverter<?>> 
> > typeConverterMap = new HashMap<Class<?>, TypeConverter<?>>();
> > -
> > -       static {
> > -               typeConverterMap.put(byteArrayType, new 
> > ByteArrayConverter());
> > -               typeConverterMap.put(Date.class, new DateConverter());
> > -               typeConverterMap.put(Boolean.class, new BooleanConverter());
> > -               typeConverterMap.put(String.class, new StringConverter());
> > -               typeConverterMap.put(Integer.class, new IntegerConverter());
> > -               typeConverterMap.put(BigInteger.class, new 
> > BigIntegerConverter());
> > -               typeConverterMap.put(Long.class, new LongConverter());
> > -               typeConverterMap.put(Double.class, new DoubleConverter());
> > -               typeConverterMap.put(UriRef.class, new UriRefConverter());
> > -       }
> > -
> >
> >        @SuppressWarnings("unchecked")
> >        @Override
> >
> > Modified: 
> > incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/EasyGraph.scala
> > URL: 
> > http://svn.apache.org/viewvc/incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/EasyGraph.scala?rev=1101934&r1=1101933&r2=1101934&view=diff
> > ==============================================================================
> > --- 
> > incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/EasyGraph.scala
> >  (original)
> > +++ 
> > incubator/clerezza/trunk/parent/rdf.scala.utils/src/main/scala/org/apache/clerezza/rdf/scala/utils/EasyGraph.scala
> >  Wed May 11 16:04:20 2011
> > @@ -24,8 +24,10 @@ import collection.mutable.Queue
> >  import impl._
> >  import org.apache.clerezza.rdf.ontologies.{RDF, RDFS, FOAF}
> >  import java.math.BigInteger
> > -import java.util.Date
> >  import org.apache.clerezza.rdf.utils.{UnionMGraph, GraphNode}
> > +import java.util.{HashSet, Collections, Date}
> > +import java.lang.Boolean
> > +import com.sun.tools.internal.xjc.reader.xmlschema.BindGreen
> >
> >  object EasyGraph {
> >        final val en = "en"
> > @@ -33,10 +35,17 @@ object EasyGraph {
> >        final val fr = "fr"
> >        val litFactory = new SimpleLiteralFactory()
> >
> > +       import org.apache.clerezza.rdf.core.impl.SimpleLiteralFactory._
> > +
> >        implicit def string2lit(str: String) = new PlainLiteralScala(str)
> >        implicit def date2lit(date: Date) = 
> > litFactory.createTypedLiteral(date)
> > -       implicit def int2lit(date: Int) = 
> > litFactory.createTypedLiteral(date)
> > -
> > +       implicit def int2lit(int: Int) = litFactory.createTypedLiteral(int)
> > +       implicit def bigint2lit(bint: BigInt) = 
> > litFactory.createTypedLiteral(bint.underlying())
> > +       implicit def bigint2lit(bigInt: BigInteger) = 
> > litFactory.createTypedLiteral(bigInt)
> > +       implicit def bool2lit(boolean: Boolean) = 
> > litFactory.createTypedLiteral(boolean)
> > +       implicit def scalaBool2lit(boolean: scala.Boolean) = 
> > litFactory.createTypedLiteral(boolean)
> > +       implicit def long2lit(long: Long) = 
> > litFactory.createTypedLiteral(long)
> > +       implicit def double2lit(double: Double) = 
> > litFactory.createTypedLiteral(double)
> >
> >
> >  //     val g = new EasyGraph(new SimpleMGraph)
> > @@ -103,6 +112,12 @@ class PlainLiteralScala(string: String)
> >
> >  class EasyGraph(val graph: TripleCollection) extends SimpleMGraph(graph) {
> >
> > +  /*
> > +       * because we can't jump straight to super constructor in Scala we 
> > need to
> > +       * create the collection here
> > +       **/
> > +       def this() = this( new SimpleMGraph() )
> > +
> >        def +=(other: Graph) = {
> >                  if (graph ne  other) graph.addAll(other)
> >        }
> > @@ -115,6 +130,9 @@ class EasyGraph(val graph: TripleCollect
> >
> >        def apply(subj: NonLiteral) = new EasyGraphNode(subj, this)
> >
> > +       //note one could have an apply for a Literal that would return a 
> > InversePredicate
> > +       //but that would require restructuring EasyGraphNode so that one 
> > can have an EasyGraphNode
> > +       //with a missing ref, or perhaps a sublcass of EasyGraphnode that 
> > only has the <- operator available
> >  }
> >
> >
> >
> >
> >
> 

Social Web Architect
http://bblfish.net/

Reply via email to