| | |
| | | { |
| | | private static class EmptyImpl implements Impl |
| | | { |
| | | private final Map<SchemaLocal<?>, Object> attachments; |
| | | |
| | | private final SchemaCompatOptions options; |
| | | |
| | | |
| | |
| | | private EmptyImpl() |
| | | { |
| | | this.options = SchemaCompatOptions.defaultOptions(); |
| | | this.attachments = new WeakHashMap<SchemaLocal<?>, Object>(); |
| | | } |
| | | |
| | | |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | public <T> T getAttachment(SchemaLocal<T> attachment) |
| | | { |
| | | T o; |
| | | synchronized (attachments) |
| | | { |
| | | o = (T) attachments.get(attachment); |
| | | if (o == null) |
| | | { |
| | | o = attachment.initialValue(); |
| | | if (o != null) |
| | | { |
| | | attachments.put(attachment, o); |
| | | } |
| | | } |
| | | } |
| | | return o; |
| | | } |
| | | |
| | | |
| | |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | public <T> T removeAttachment(SchemaLocal<T> attachment) |
| | | { |
| | | T o; |
| | | synchronized (attachments) |
| | | { |
| | | o = (T) attachments.remove(attachment); |
| | | } |
| | | return o; |
| | | } |
| | | |
| | | |
| | | |
| | | public <T> void setAttachment(SchemaLocal<T> attachment, T value) |
| | | { |
| | | synchronized (attachments) |
| | | { |
| | | attachments.put(attachment, value); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | private static interface Impl |
| | | { |
| | | <T> T getAttachment(SchemaLocal<T> attachment); |
| | | |
| | | |
| | | |
| | | AttributeType getAttributeType(String name) |
| | | throws UnknownSchemaElementException; |
| | | |
| | |
| | | |
| | | |
| | | boolean isStrict(); |
| | | |
| | | |
| | | |
| | | <T> T removeAttachment(SchemaLocal<T> attachment); |
| | | |
| | | |
| | | |
| | | <T> void setAttachment(SchemaLocal<T> attachment, T value); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | |
| | | |
| | | public <T> T getAttachment(SchemaLocal<T> attachment) |
| | | { |
| | | return strictImpl.getAttachment(attachment); |
| | | } |
| | | |
| | | |
| | | |
| | | public AttributeType getAttributeType(String name) |
| | | throws UnknownSchemaElementException |
| | | { |
| | |
| | | { |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | public <T> T removeAttachment(SchemaLocal<T> attachment) |
| | | { |
| | | return strictImpl.removeAttachment(attachment); |
| | | } |
| | | |
| | | |
| | | |
| | | public <T> void setAttachment(SchemaLocal<T> attachment, T value) |
| | | { |
| | | strictImpl.setAttachment(attachment, value); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | private static class StrictImpl implements Impl |
| | | { |
| | | private final Map<SchemaLocal<?>, Object> attachments; |
| | | |
| | | private final Map<Integer, DITStructureRule> id2StructureRules; |
| | | |
| | | private final Map<String, List<AttributeType>> name2AttributeTypes; |
| | |
| | | this.nameForm2StructureRules = Collections |
| | | .unmodifiableMap(nameForm2StructureRules); |
| | | this.options = options; |
| | | attachments = new WeakHashMap<SchemaLocal<?>, Object>(); |
| | | } |
| | | |
| | | |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | public <T> T getAttachment(SchemaLocal<T> attachment) |
| | | { |
| | | T o; |
| | | synchronized (attachments) |
| | | { |
| | | o = (T) attachments.get(attachment); |
| | | if (o == null) |
| | | { |
| | | o = attachment.initialValue(); |
| | | if (o != null) |
| | | { |
| | | attachments.put(attachment, o); |
| | | } |
| | | } |
| | | } |
| | | return o; |
| | | } |
| | | |
| | | |
| | |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | public <T> T removeAttachment(SchemaLocal<T> attachment) |
| | | { |
| | | T o; |
| | | synchronized (attachments) |
| | | { |
| | | o = (T) attachments.remove(attachment); |
| | | } |
| | | return o; |
| | | } |
| | | |
| | | |
| | | |
| | | public <T> void setAttachment(SchemaLocal<T> attachment, T value) |
| | | { |
| | | synchronized (attachments) |
| | | { |
| | | attachments.put(attachment, value); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | |
| | | |
| | | <T> T getAttachment(SchemaLocal<T> attachment) |
| | | { |
| | | return impl.getAttachment(attachment); |
| | | } |
| | | |
| | | |
| | | |
| | | SchemaCompatOptions getSchemaCompatOptions() |
| | | { |
| | | return impl.getSchemaCompatOptions(); |
| | | } |
| | | |
| | | |
| | | |
| | | <T> T removeAttachment(SchemaLocal<T> attachment) |
| | | { |
| | | return impl.removeAttachment(attachment); |
| | | } |
| | | |
| | | |
| | | |
| | | <T> void setAttachment(SchemaLocal<T> attachment, T value) |
| | | { |
| | | impl.setAttachment(attachment, value); |
| | | } |
| | | } |