Author: julien_viet
Date: 2010-01-14 10:35:44 -0500 (Thu, 14 Jan 2010)
New Revision: 1297
Removed:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/annotations/Factory.java
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/C1.java
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/C2.java
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/SerializationContext.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/factory/DefaultObjectFactory.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/factory/ObjectFactory.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/ClassTypeModel.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/TypeDomain.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectReader.java
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectWriter.java
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/A1.java
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/A2.java
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/TestObjectFactory.java
Log:
actually make factory simpler and less constrained
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/SerializationContext.java
===================================================================
---
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/SerializationContext.java 2010-01-14
15:28:54 UTC (rev 1296)
+++
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/SerializationContext.java 2010-01-14
15:35:44 UTC (rev 1297)
@@ -19,6 +19,8 @@
package org.exoplatform.webui.application.replication;
+import org.exoplatform.webui.application.replication.factory.DefaultObjectFactory;
+import org.exoplatform.webui.application.replication.factory.ObjectFactory;
import org.exoplatform.webui.application.replication.model.TypeDomain;
import org.exoplatform.webui.application.replication.serial.ObjectReader;
import org.exoplatform.webui.application.replication.serial.ObjectWriter;
@@ -26,10 +28,9 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.lang.reflect.ParameterizedType;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
@@ -42,17 +43,31 @@
private final TypeDomain typeDomain;
/** . */
- private final Map<Class<?>, Object> creationContexts;
+ private final Map<Class<?>, ObjectFactory<?>> factories;
public SerializationContext(TypeDomain typeDomain)
{
+ HashMap<Class<?>, ObjectFactory<?>> factories = new
HashMap<Class<?>, ObjectFactory<?>>();
+ factories.put(Object.class, new DefaultObjectFactory());
+
+ //
this.typeDomain = typeDomain;
- this.creationContexts = new HashMap<Class<?>, Object>();
+ this.factories = factories;
}
- public void addCreationContext(Object o)
+ public <O> void addFactory(ObjectFactory<O> factory)
{
- creationContexts.put(o.getClass(), o);
+ // OK
+ Class<ObjectFactory<O>> factoryClass =
(Class<ObjectFactory<O>>)factory.getClass();
+
+ //
+ ParameterizedType pt = (ParameterizedType)factoryClass.getGenericSuperclass();
+
+ // OK
+ Class<?> objectType = (Class<Object>)pt.getActualTypeArguments()[0];
+
+ //
+ factories.put(objectType, factory);
}
public TypeDomain getTypeDomain()
@@ -60,10 +75,19 @@
return typeDomain;
}
- public <C> C getContext(Class<C> contextType)
+ public <O>ObjectFactory<? super O> getFactory(Class<O> type)
{
- // This is ok
- return (C)creationContexts.get(contextType);
+ // OK
+ ObjectFactory<O> factory = (ObjectFactory<O>)factories.get(type);
+
+ //
+ if (factory == null)
+ {
+ return getFactory(type.getSuperclass());
+ }
+
+ //
+ return factory;
}
public <O> O clone(O o) throws IOException, ClassNotFoundException
Deleted:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/annotations/Factory.java
===================================================================
---
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/annotations/Factory.java 2010-01-14
15:28:54 UTC (rev 1296)
+++
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/annotations/Factory.java 2010-01-14
15:35:44 UTC (rev 1297)
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-
-package org.exoplatform.webui.application.replication.annotations;
-
-import org.exoplatform.webui.application.replication.factory.ObjectFactory;
-
-import java.lang.annotation.*;
-
-/**
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
- * @version $Revision$
- */
-(a)Target(ElementType.TYPE)
-(a)Retention(RetentionPolicy.RUNTIME)
-@Inherited
-public @interface Factory
-{
-
- Class<? extends ObjectFactory<?, ?>> type();
-
-}
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/factory/DefaultObjectFactory.java
===================================================================
---
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/factory/DefaultObjectFactory.java 2010-01-14
15:28:54 UTC (rev 1296)
+++
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/factory/DefaultObjectFactory.java 2010-01-14
15:35:44 UTC (rev 1297)
@@ -23,9 +23,9 @@
* @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
* @version $Revision$
*/
-public final class DefaultObjectFactory extends ObjectFactory<Object, Object>
+public final class DefaultObjectFactory extends ObjectFactory<Object>
{
- public <O> O create(Class<O> type, Object context) throws CreateException
+ public <O> O create(Class<O> type) throws CreateException
{
try
{
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/factory/ObjectFactory.java
===================================================================
---
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/factory/ObjectFactory.java 2010-01-14
15:28:54 UTC (rev 1296)
+++
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/factory/ObjectFactory.java 2010-01-14
15:35:44 UTC (rev 1297)
@@ -23,20 +23,18 @@
* @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
* @version $Revision$
* @param <B> the base object type
- * @param <C> the context type
*/
-public abstract class ObjectFactory<B, C>
+public abstract class ObjectFactory<B>
{
/**
* Instantiate an object based on the provided class.
*
* @param type the type
- * @param context the context
* @param <S> the sub type of the base type
* @return the S instance
* @throws CreateException anything wrong that could happen during instance creation
*/
- public abstract <S extends B> S create(Class<S> type, C context) throws
CreateException;
+ public abstract <S extends B> S create(Class<S> type) throws
CreateException;
}
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/ClassTypeModel.java
===================================================================
---
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/ClassTypeModel.java 2010-01-14
15:28:54 UTC (rev 1296)
+++
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/ClassTypeModel.java 2010-01-14
15:35:44 UTC (rev 1297)
@@ -19,8 +19,6 @@
package org.exoplatform.webui.application.replication.model;
-import org.exoplatform.webui.application.replication.factory.ObjectFactory;
-
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
@@ -29,7 +27,7 @@
* @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
* @version $Revision$
*/
-public class ClassTypeModel<O, C> extends TypeModel
+public class ClassTypeModel<O> extends TypeModel
{
/** . */
@@ -44,18 +42,10 @@
/** . */
private final Map<String, FieldModel> immutableFields;
- /** . */
- private final ObjectFactory<? super O, C> factory;
-
- /** . */
- private final Class<C> contextType;
-
ClassTypeModel(
Class<O> javaType,
TypeModel superType,
- Map<String, FieldModel> fields,
- ObjectFactory<? super O, C> factory,
- Class<C> contextType)
+ Map<String, FieldModel> fields)
{
super(javaType);
@@ -64,8 +54,6 @@
this.superType = superType;
this.fields = fields;
this.immutableFields = Collections.unmodifiableMap(fields);
- this.factory = factory;
- this.contextType = contextType;
}
public Class<O> getObjectType()
@@ -73,16 +61,6 @@
return objectType;
}
- public Class<C> getContextType()
- {
- return contextType;
- }
-
- public ObjectFactory<? super O, C> getFactory()
- {
- return factory;
- }
-
public TypeModel getSuperType()
{
return superType;
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/TypeDomain.java
===================================================================
---
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/TypeDomain.java 2010-01-14
15:28:54 UTC (rev 1296)
+++
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/model/TypeDomain.java 2010-01-14
15:35:44 UTC (rev 1297)
@@ -19,14 +19,10 @@
package org.exoplatform.webui.application.replication.model;
-import org.exoplatform.webui.application.replication.annotations.Factory;
import org.exoplatform.webui.application.replication.annotations.ReplicatedType;
-import org.exoplatform.webui.application.replication.factory.DefaultObjectFactory;
-import org.exoplatform.webui.application.replication.factory.ObjectFactory;
import java.io.Serializable;
import java.lang.reflect.Field;
-import java.lang.reflect.ParameterizedType;
import java.util.*;
/**
@@ -126,7 +122,7 @@
return null;
}
- private <O> ClassTypeModel<O, ?> buildClassTypeModel(Class<O>
javaType, Map<String, TypeModel> addedTypeModels)
+ private <O> ClassTypeModel<O> buildClassTypeModel(Class<O> javaType,
Map<String, TypeModel> addedTypeModels)
{
ClassTypeModel typeModel = (ClassTypeModel) get(javaType, addedTypeModels);
if (typeModel == null)
@@ -145,38 +141,9 @@
TreeMap<String, FieldModel> fieldModels = new TreeMap<String,
FieldModel>();
//
- Class<? extends ObjectFactory<?, ?>> declaredFactoryType = null;
- Factory factoryAnn = javaType.getAnnotation(Factory.class);
- if (factoryAnn != null)
- {
- declaredFactoryType = factoryAnn.type();
- }
+ typeModel = new ClassTypeModel<O>(javaType, superTypeModel, fieldModels);
//
- Class<? extends ObjectFactory<? super O, Object>> factoryType =
null;
- if (declaredFactoryType != null)
- {
- if
(((Class<Object>)((ParameterizedType)declaredFactoryType.getGenericSuperclass()).getActualTypeArguments()[0]).isAssignableFrom(javaType))
- {
- factoryType = (Class<ObjectFactory<? super
O,Object>>)declaredFactoryType;
- }
- else
- {
- throw new TypeException();
- }
- }
-
- //
- if (factoryType != null)
- {
- typeModel = createClassType(javaType, fieldModels, superTypeModel,
factoryType);
- }
- else
- {
- typeModel = createClassType(javaType, fieldModels, superTypeModel);
- }
-
- //
addedTypeModels.put(javaType.getName(), typeModel);
// Now build fields
@@ -193,34 +160,9 @@
}
// It must be good
- return (ClassTypeModel<O,?>)typeModel;
+ return (ClassTypeModel<O>)typeModel;
}
- private <O, C> ClassTypeModel<O, C> createClassType(
- Class<O> javaType,
- Map<String, FieldModel> fieldModels,
- TypeModel superTypeModel,
- Class<? extends ObjectFactory<? super O, C>> factoryType) {
- Class<C> contextType =
(Class<C>)((ParameterizedType)factoryType.getGenericSuperclass()).getActualTypeArguments()[1];
- ObjectFactory<? super O, C> factory;
- try
- {
- factory = factoryType.newInstance();
- }
- catch (Exception e)
- {
- throw new TypeException();
- }
- return new ClassTypeModel<O, C>(javaType, superTypeModel, fieldModels,
factory, contextType);
- }
-
- private <O> ClassTypeModel<O, Object> createClassType(
- Class<O> javaType,
- Map<String, FieldModel> fieldModels,
- TypeModel superTypeModel) {
- return new ClassTypeModel<O, Object>(javaType, superTypeModel, fieldModels,
new DefaultObjectFactory(), Object.class);
- }
-
private SerializableTypeModel buildSerializable(Class<?> javaType,
Map<String, TypeModel> addedTypeModels)
{
SerializableTypeModel typeModel = (SerializableTypeModel) get(javaType,
addedTypeModels);
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectReader.java
===================================================================
---
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectReader.java 2010-01-14
15:28:54 UTC (rev 1296)
+++
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectReader.java 2010-01-14
15:35:44 UTC (rev 1297)
@@ -57,17 +57,14 @@
this.idToResolutions = new HashMap<Integer, List<Resolution>>();
}
- private <O, C> O instantiate(ClassTypeModel<O, C> typeModel) throws
InvalidClassException
+ private <O> O instantiate(ClassTypeModel<O> typeModel) throws
InvalidClassException
{
try
{
- ObjectFactory<? super O, C> factory = typeModel.getFactory();
+ ObjectFactory<? super O> factory =
context.getFactory(typeModel.getObjectType());
//
- C c = context.getContext(typeModel.getContextType());
-
- //
- return factory.create(typeModel.getObjectType(), c);
+ return factory.create(typeModel.getObjectType());
}
catch (Exception e)
{
@@ -100,7 +97,7 @@
id = container.readInt();
Class clazz = (Class) container.readObject();
- ClassTypeModel<?, ?> typeModel =
(ClassTypeModel)context.getTypeDomain().getTypeModel(clazz);
+ ClassTypeModel<?> typeModel =
(ClassTypeModel)context.getTypeDomain().getTypeModel(clazz);
//
Object instance = instantiate(typeModel);
@@ -109,7 +106,7 @@
idToObject.put(id, instance);
//
- ClassTypeModel<?, ?> currentTypeModel = typeModel;
+ ClassTypeModel<?> currentTypeModel = typeModel;
while (true)
{
for (FieldModel fieldModel : (currentTypeModel).getFields())
Modified:
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectWriter.java
===================================================================
---
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectWriter.java 2010-01-14
15:28:54 UTC (rev 1296)
+++
portal/trunk/webui/core/src/main/java/org/exoplatform/webui/application/replication/serial/ObjectWriter.java 2010-01-14
15:35:44 UTC (rev 1297)
@@ -22,13 +22,10 @@
import org.exoplatform.webui.application.replication.SerializationContext;
import org.exoplatform.webui.application.replication.model.ClassTypeModel;
import org.exoplatform.webui.application.replication.model.FieldModel;
-import org.exoplatform.webui.application.replication.model.TypeDomain;
import org.exoplatform.webui.application.replication.model.TypeModel;
import java.io.*;
-import java.util.HashMap;
import java.util.IdentityHashMap;
-import java.util.Map;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
@@ -82,7 +79,7 @@
}
else
{
- ClassTypeModel<?, ?> typeModel = (ClassTypeModel<?,
?>)context.getTypeDomain().getTypeModel(obj.getClass());
+ ClassTypeModel<?> typeModel =
(ClassTypeModel<?>)context.getTypeDomain().getTypeModel(obj.getClass());
//
if (typeModel == null)
@@ -96,7 +93,7 @@
output.writeObject(obj.getClass());
//
- ClassTypeModel<?, ?> currentTypeModel = typeModel;
+ ClassTypeModel<?> currentTypeModel = typeModel;
while (true)
{
for (FieldModel fieldModel : (currentTypeModel).getFields())
Modified:
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/A1.java
===================================================================
---
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/A1.java 2010-01-14
15:28:54 UTC (rev 1296)
+++
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/A1.java 2010-01-14
15:35:44 UTC (rev 1297)
@@ -26,13 +26,13 @@
* @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
* @version $Revision$
*/
-public class A1 extends ObjectFactory<A2, Object>
+public class A1 extends ObjectFactory<A2>
{
static A2 instance = new A2();
@Override
- public <E extends A2> E create(Class<E> type, Object context) throws
CreateException
+ public <E extends A2> E create(Class<E> type) throws CreateException
{
if (type == A2.class)
{
Modified:
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/A2.java
===================================================================
---
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/A2.java 2010-01-14
15:28:54 UTC (rev 1296)
+++
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/A2.java 2010-01-14
15:35:44 UTC (rev 1297)
@@ -19,7 +19,6 @@
package org.exoplatform.webui.replication.factory;
-import org.exoplatform.webui.application.replication.annotations.Factory;
import org.exoplatform.webui.application.replication.annotations.ReplicatedType;
/**
@@ -27,7 +26,6 @@
* @version $Revision$
*/
@ReplicatedType
-@Factory(type = A1.class)
public class A2
{
}
\ No newline at end of file
Deleted:
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/C1.java
===================================================================
---
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/C1.java 2010-01-14
15:28:54 UTC (rev 1296)
+++
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/C1.java 2010-01-14
15:35:44 UTC (rev 1297)
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-
-package org.exoplatform.webui.replication.factory;
-
-import junit.framework.AssertionFailedError;
-import org.exoplatform.webui.application.replication.factory.CreateException;
-import org.exoplatform.webui.application.replication.factory.ObjectFactory;
-
-/**
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
- * @version $Revision$
- */
-public class C1 extends ObjectFactory<String, Object>
-{
-
- @Override
- public <E extends String> E create(Class<E> type, Object context) throws
CreateException
- {
- throw new AssertionFailedError();
- }
-}
\ No newline at end of file
Deleted:
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/C2.java
===================================================================
---
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/C2.java 2010-01-14
15:28:54 UTC (rev 1296)
+++
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/C2.java 2010-01-14
15:35:44 UTC (rev 1297)
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2009 eXo Platform SAS.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
- */
-
-package org.exoplatform.webui.replication.factory;
-
-import org.exoplatform.webui.application.replication.annotations.Factory;
-import org.exoplatform.webui.application.replication.annotations.ReplicatedType;
-
-/**
- * @author <a href="mailto:julien.viet@exoplatform.com">Julien
Viet</a>
- * @version $Revision$
- */
-@ReplicatedType
-@Factory(type = C1.class)
-public class C2
-{
-}
\ No newline at end of file
Modified:
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/TestObjectFactory.java
===================================================================
---
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/TestObjectFactory.java 2010-01-14
15:28:54 UTC (rev 1296)
+++
portal/trunk/webui/core/src/test/java/org/exoplatform/webui/replication/factory/TestObjectFactory.java 2010-01-14
15:35:44 UTC (rev 1297)
@@ -38,6 +38,7 @@
TypeDomain domain = new TypeDomain();
domain.add(A2.class);
SerializationContext context = new SerializationContext(domain);
+ context.addFactory(new A1());
A2 a2 = new A2();
assertSame(A1.instance, context.clone(a2));
}
@@ -57,23 +58,4 @@
{
}
}
-
- public void testFactoryClassNotAssignable() throws Exception
- {
- TypeDomain domain = new TypeDomain();
- try
- {
- domain.add(C2.class);
- fail();
- }
- catch (TypeException e)
- {
- }
- }
-
- public void testCreationContext() throws Exception
- {
- TypeDomain domain = new TypeDomain();
- }
-
}