Rev 1945 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
package pt.estgp.estgweb.domain;
import com.owlike.genson.Genson;
import com.owlike.genson.GensonBuilder;
import org.apache.log4j.Logger;
import org.json.JSONException;
import org.json.JSONObject;
import pt.estgp.estgweb.domain.utils.JsonView;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.util.Date;
import java.util.List;
/**
* @author Jorge Machado
* @date 2/Mar/2008
* @time 10:56:46
* @see pt.estgp.estgweb.domain
*/
public abstract class DomainObject
implements JsonView
{
private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger =
1.5.0/docs/api/java/util/logging/Logger.html">Logger.
getLogger(DomainObject.
class);
private static final 5+0%2Fdocs%2Fapi+Date">Date MIN_DATE =
new 5+0%2Fdocs%2Fapi+Date">Date(0
);
private static final 5+0%2Fdocs%2Fapi+Date">Date MAX_DATE =
new 5+0%2Fdocs%2Fapi+Date">Date(1.5.0/docs/api/java/lang/Integer.html">Integer.
MAX_VALUE);
private static Genson gensonGenericLoad
;
static{
gensonGenericLoad =
new GensonBuilder
()
//Usa ClassMetadata nos objectos contidos se houver
// porque no principal já foi buscar antes fazendo parse ao JSON no metodo fromJson e fazendo get("@class")
//porque no genson o @class tem de vir em primeiro e pode não
// se nos outros não vier info da class ele falha
.
useMethods(true) //only bean proerties
.
useFields(true) //pode existir uma var com campos publicos esses ele serializa
.
useRuntimeType(true)
.
useClassMetadata(true)
.
useDateAsTimestamp(true)
.
exclude(5+0%2Fdocs%2Fapi+Date">Date.
class)
.
exclude(java.
sql.
5+0%2Fdocs%2Fapi+Timestamp">Timestamp.
class)
.
exclude(java.
sql.
5+0%2Fdocs%2Fapi+Date">Date.
class)
.
create();
}
public static DomainObject fromJson
(1.5.0/docs/api/java/lang/String.html">String json
)
{
try {
1.5.0/docs/api/java/lang/String.html">String className =
(1.5.0/docs/api/java/lang/String.html">String) new JSONObject
(json
).
get("@class");
if(className
!=
null)
return (DomainObject
) gensonGenericLoad.
deserialize(json,
1.5.0/docs/api/java/lang/Class.html">Class.
forName(className
));
return gensonGenericLoad.
deserialize(json,DomainObject.
class);
} catch (1.5.0/docs/api/java/lang/ClassNotFoundException.html">ClassNotFoundException e
) {
logger.
error(e,e
);
throw new 1.5.0/docs/api/java/lang/RuntimeException.html">RuntimeException("Fail Json Object:",e
);
} catch (JSONException e
) {
logger.
error(e, e
);
throw new 1.5.0/docs/api/java/lang/RuntimeException.html">RuntimeException("Fail Json Object:",e
);
}
}
private Genson genson =
null;
private synchronized void createGensonBuilder
()
{
if(genson ==
null)
{
1.5.0/docs/api/java/beans/BeanInfo.html">BeanInfo bi
;
GensonBuilder gensonBuilder =
new GensonBuilder
()
.
useClassMetadata(true)
.
exclude(5+0%2Fdocs%2Fapi+Object">Object.
class);
//.useFields(false, VisibilityFilter.NONE);
try {
bi =
1.5.0/docs/api/java/beans/Introspector.html">Introspector.
getBeanInfo(this.
getClass());
} catch (5+0%2Fdocs%2Fapi+IntrospectionException">IntrospectionException e
) {
e.
printStackTrace();
throw new 1.5.0/docs/api/java/lang/RuntimeException.html">RuntimeException(e
);
}
List
<String
> excludedProperties = getJsonExcludedProperties
();
1.5.0/docs/api/java/beans/PropertyDescriptor.html">PropertyDescriptor[] pds = bi.
getPropertyDescriptors();
for (int i =
0; i
< pds.
length; i++
) {
1.5.0/docs/api/java/lang/String.html">String propName = pds
[i
].
getDisplayName();
if(excludedProperties ==
null ||
!excludedProperties.
contains(propName
))
gensonBuilder = gensonBuilder.
include(propName,
this.
getClass());
else
gensonBuilder = gensonBuilder.
exclude(propName,
this.
getClass());
}
genson = gensonBuilder.
create();
}
}
/**
* Generic Json Object only for local class methods
* @return
* @throws JSONException
*/
@
1.5.0/docs/api/java/lang/Override.html">Override
public JSONObject toJsonObject
() throws JSONException
{
return new JSONObject
(toJson
());
}
/**
* * Generic Json Object only for local class methods
* @return
* @throws IOException
*/
@
1.5.0/docs/api/java/lang/Override.html">Override
public 1.5.0/docs/api/java/lang/String.html">String toJson
() {
createGensonBuilder
();
return genson.
serialize(this);
}
@
1.5.0/docs/api/java/lang/Override.html">Override
public List
<String
> getJsonExcludedProperties
() {
return null;
}
public void searchMyMethodsStartingWith
(1.5.0/docs/api/java/lang/String.html">String propNamePrefix, List
<String
> listMethods
) {
1.5.0/docs/api/java/beans/BeanInfo.html">BeanInfo bi
;
try {
bi =
1.5.0/docs/api/java/beans/Introspector.html">Introspector.
getBeanInfo(this.
getClass());
} catch (5+0%2Fdocs%2Fapi+IntrospectionException">IntrospectionException e
) {
e.
printStackTrace();
throw new 1.5.0/docs/api/java/lang/RuntimeException.html">RuntimeException(e
);
}
1.5.0/docs/api/java/beans/PropertyDescriptor.html">PropertyDescriptor[] pds = bi.
getPropertyDescriptors();
for (int i =
0; i
< pds.
length; i++
) {
1.5.0/docs/api/java/lang/String.html">String propName = pds
[i
].
getDisplayName();
if(propName.
startsWith(propNamePrefix
))
listMethods.
add(propName
);
}
}
public void setSaveDate
(5+0%2Fdocs%2Fapi+Date">Date d
)
{
}
public 5+0%2Fdocs%2Fapi+Date">Date getSaveDate
()
{
return null;
}
public 5+0%2Fdocs%2Fapi+Date">Date getStartTime
()
{
return MIN_DATE
;
}
public 5+0%2Fdocs%2Fapi+Date">Date getEndTime
()
{
return MAX_DATE
;
}
public 1.5.0/docs/api/java/lang/Class.html">Class getReferenceClass
()
{
return this.
getClass();
}
public static void main
(1.5.0/docs/api/java/lang/String.html">String[] argv
) throws 1.5.0/docs/api/java/lang/Exception.html">Exception {
// AbstractDao.getCurrentSession().beginTransaction();
1.5.0/docs/api/java/lang/System.html">System.
out.
println(DomainObject.
fromJson("{\n" +
" \"flowComponentId\": 67,\n" +
" \"@class\": \"pt.estgp.estgweb.domain.BpmnFlowConnectorImpl\",\n" +
" \"encaminhadorTarefaVarHolder\": null,\n" +
" \"updateDate\": 1497716649000,\n" +
" \"id\": 14,\n" +
" \"msgEmail\": null,\n" +
" \"nameConnection\": \"kn\",\n" +
" \"sendEmail\": false,\n" +
" \"targetTypes\": null,\n" +
" \"encaminhadorTarefaVarHolderType\": null,\n" +
" \"saveDate\": 1497716649083,\n" +
" \"keyValue\": null,\n" +
" \"selected\": true,\n" +
" \"dirty\": true\n" +
" }").
toJson());
}
}