package xapi.dev.model; import xapi.annotation.model.ClientToServer; import xapi.annotation.model.Key; import xapi.annotation.model.Persistent; import xapi.annotation.model.Serializable; import xapi.annotation.model.ServerToClient; import xapi.collect.X_Collect; import xapi.collect.api.Fifo; import xapi.collect.api.StringTo; import xapi.collect.impl.StringToAbstract; import xapi.model.api.Model; import xapi.model.api.NestedModel; import xapi.model.api.PersistentModel; import xapi.source.api.HasQualifiedName; public class HasModelFields implements java.io.Serializable { // private Serializable defaultSerializable; private ClientToServer defaultToServer; private ServerToClient defaultToClient; StringTo<ModelField> fields = new StringToAbstract<ModelField>(ModelField.class); private Persistent defaultPersistence; private Key key; public ModelField getOrMakeField(final String field) { assert field.length() > 0 : "Cannot have a field named \"\""; ModelField f = fields.get(field); if (f == null) { f = new ModelField(field); fields.put(field, f); } return f; } public Iterable<ModelField> getAllFields() { return fields.values(); } public Iterable<ModelField> getAllSerializable() { final Fifo<ModelField> fifo = X_Collect.newFifo(); for (final ModelField field : fields.values()) { final Serializable serial = field.getSerializable(); if (serial == null) { final ClientToServer c2s = field.getClientToServer(); if (c2s != null && c2s.enabled()) { fifo.give(field); continue; } final ServerToClient s2c = field.getServerToClient(); if (s2c != null && s2c.enabled()) { fifo.give(field); continue; } } else { // class is marked serializable fifo.give(field); } } return fifo.forEach(); } /** * @param defaultSerializable the default Serializable policy to set */ public void setDefaultSerializable(final Serializable defaultSerializable) { if (defaultSerializable == null) { defaultToClient = null; defaultToServer = null; } else { defaultToClient = defaultSerializable.serverToClient(); defaultToServer = defaultSerializable.clientToServer(); } } /** * @return the defaultToServer */ public ClientToServer getDefaultToServer() { return defaultToServer; } /** * @return the defaultToClient */ public ServerToClient getDefaultToClient() { return defaultToClient; } public void setDefaultPersistence(final Persistent persist) { this.defaultPersistence = persist; } public void setKey(final Key key) { this.key = key; } public static boolean isPersistentModel(final HasQualifiedName type) { return type.getQualifiedName().equals(PersistentModel.class.getName()); } public static boolean isNestedModel(final HasQualifiedName type) { return type.getQualifiedName().equals(NestedModel.class.getName()); } public static boolean isModel(final HasQualifiedName type) { return type.getQualifiedName().equals(Model.class.getName()) ||isPersistentModel(type)||isNestedModel(type); } }