X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.databoard%2Fsrc%2Forg%2Fsimantics%2Fdataboard%2Faccessor%2Fbinary%2FBinaryString.java;h=a3c44e28ad3c82b6de647bd71252ea9d7736df93;hb=refs%2Fchanges%2F38%2F238%2F2;hp=4f730c2c27f346e8b159d472797ff603ecbfbc39;hpb=24e2b34260f219f0d1644ca7a138894980e25b14;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.databoard/src/org/simantics/databoard/accessor/binary/BinaryString.java b/bundles/org.simantics.databoard/src/org/simantics/databoard/accessor/binary/BinaryString.java index 4f730c2c2..a3c44e28a 100644 --- a/bundles/org.simantics.databoard/src/org/simantics/databoard/accessor/binary/BinaryString.java +++ b/bundles/org.simantics.databoard/src/org/simantics/databoard/accessor/binary/BinaryString.java @@ -1,38 +1,38 @@ -/******************************************************************************* - * Copyright (c) 2010 Association for Decentralized Information Management in - * Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ +/******************************************************************************* + * Copyright (c) 2010 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ package org.simantics.databoard.accessor.binary; -import java.io.IOException; - -import org.simantics.databoard.Bindings; -import org.simantics.databoard.accessor.Accessor; -import org.simantics.databoard.accessor.StringAccessor; -import org.simantics.databoard.accessor.error.AccessorConstructionException; -import org.simantics.databoard.accessor.error.AccessorException; -import org.simantics.databoard.accessor.error.ReferenceException; -import org.simantics.databoard.accessor.event.Event; -import org.simantics.databoard.accessor.event.ValueAssigned; -import org.simantics.databoard.accessor.file.FileStringAccessor; -import org.simantics.databoard.accessor.impl.AccessorParams; -import org.simantics.databoard.accessor.impl.ListenerEntry; -import org.simantics.databoard.accessor.interestset.StringInterestSet; -import org.simantics.databoard.accessor.reference.ChildReference; -import org.simantics.databoard.binding.Binding; -import org.simantics.databoard.binding.StringBinding; -import org.simantics.databoard.binding.error.BindingException; -import org.simantics.databoard.type.StringType; -import org.simantics.databoard.util.binary.Blob; -import org.simantics.databoard.util.binary.Endian; -import org.simantics.databoard.util.binary.UTF8; +import java.io.IOException; + +import org.simantics.databoard.Bindings; +import org.simantics.databoard.accessor.Accessor; +import org.simantics.databoard.accessor.StringAccessor; +import org.simantics.databoard.accessor.error.AccessorConstructionException; +import org.simantics.databoard.accessor.error.AccessorException; +import org.simantics.databoard.accessor.error.ReferenceException; +import org.simantics.databoard.accessor.event.Event; +import org.simantics.databoard.accessor.event.ValueAssigned; +import org.simantics.databoard.accessor.file.FileStringAccessor; +import org.simantics.databoard.accessor.impl.AccessorParams; +import org.simantics.databoard.accessor.impl.ListenerEntry; +import org.simantics.databoard.accessor.interestset.StringInterestSet; +import org.simantics.databoard.accessor.reference.ChildReference; +import org.simantics.databoard.binding.Binding; +import org.simantics.databoard.binding.StringBinding; +import org.simantics.databoard.binding.error.BindingException; +import org.simantics.databoard.type.StringType; +import org.simantics.databoard.util.binary.Blob; +import org.simantics.databoard.util.binary.Endian; +import org.simantics.databoard.util.binary.UTF8; public class BinaryString extends BinaryObject implements StringAccessor, FileStringAccessor { @@ -48,14 +48,14 @@ public class BinaryString extends BinaryObject implements StringAccessor, FileSt @Override Event applyLocal(Event e, boolean makeRollback) throws AccessorException { - Event rollback = makeRollback ? new ValueAssigned( Bindings.STRING, getValue() ) : null; - if (e instanceof ValueAssigned) { - ValueAssigned va = (ValueAssigned) e; - if (va.newValue == null) throw new AccessorException("String value expected, got null"); - setValueNoflush(va.newValue.getBinding(), va.newValue.getValue()); - return rollback; - } else { - throw new AccessorException("Cannot apply "+e.getClass().getName()+" to String"); + Event rollback = makeRollback ? new ValueAssigned( Bindings.STRING, getValue() ) : null; + if (e instanceof ValueAssigned) { + ValueAssigned va = (ValueAssigned) e; + if (va.newValue == null) throw new AccessorException("String value expected, got null"); + setValueNoflush(va.newValue.getBinding(), va.newValue.getValue()); + return rollback; + } else { + throw new AccessorException("Cannot apply "+e.getClass().getName()+" to String"); } } @@ -68,7 +68,7 @@ public class BinaryString extends BinaryObject implements StringAccessor, FileSt } @Override - public Object getValue(Binding binding) throws AccessorException { + public Object getValue(Binding binding) throws AccessorException { try { StringBinding bb = (StringBinding) binding; String v = getValue(); @@ -76,72 +76,72 @@ public class BinaryString extends BinaryObject implements StringAccessor, FileSt } catch(BindingException e) { throw new AccessorException(e); } - } -// MODIFIED UTF-8 - @Override - public String getValue() throws AccessorException { - assert b.isOpen(); - readLock(); - try { - b.position(0L); - - int utflen = Endian.readDynamicUInt32(b); - return UTF8.readModifiedUTF(b, utflen); - } catch (IOException e) { - throw new AccessorException(e); - } finally { - readUnlock(); - } - } - - public void setValueNoflush(String string) throws AccessorException { - assert b.isOpen(); - writeLock(); - try { - // Write - b.position(0); - int strlen = UTF8.getModifiedUTF8EncodingByteLength(string); - int lenlen = Endian.getDynamicUInt32Length(strlen); - b.setLength(strlen+lenlen); - Endian.writeDynamicUInt32(b, strlen); - UTF8.writeModifiedUTF(b, string); - - // Notify - ListenerEntry le = listeners; - while (le!=null) { - StringInterestSet is = le.getInterestSet(); - if (is.inNotifications()) { - Event e = new ValueAssigned( Bindings.STRING, is.inValues() ? string : null ); - emitEvent(le, e); - } - le = le.next; - } - - } catch (IOException e) { - throw new AccessorException(e); - } finally { - writeUnlock(); - } - } + } +// MODIFIED UTF-8 + @Override + public String getValue() throws AccessorException { + assert b.isOpen(); + readLock(); + try { + b.position(0L); + + int utflen = Endian.readDynamicUInt32(b); + return UTF8.readModifiedUTF(b, utflen); + } catch (IOException e) { + throw new AccessorException(e); + } finally { + readUnlock(); + } + } + + public void setValueNoflush(String string) throws AccessorException { + assert b.isOpen(); + writeLock(); + try { + // Write + b.position(0); + int strlen = UTF8.getModifiedUTF8EncodingByteLength(string); + int lenlen = Endian.getDynamicUInt32Length(strlen); + b.setLength(strlen+lenlen); + Endian.writeDynamicUInt32(b, strlen); + UTF8.writeModifiedUTF(b, string); + + // Notify + ListenerEntry le = listeners; + while (le!=null) { + StringInterestSet is = le.getInterestSet(); + if (is.inNotifications()) { + Event e = new ValueAssigned( Bindings.STRING, is.inValues() ? string : null ); + emitEvent(le, e); + } + le = le.next; + } + + } catch (IOException e) { + throw new AccessorException(e); + } finally { + writeUnlock(); + } + } -/* REAL UTF-8 - @Override - public String getValue() throws AccessorException { - readLock(); - try { - b.position(0L); - int length = UTF8StringSerializer.getLength(b); - byte[] bytes = new byte[length]; - b.readFully(bytes); - return new String(bytes, UTF8StringSerializer.UTF8); - } catch (IOException e) { - throw new AccessorException(e); - } finally { - readUnlock(); - } - } +/* REAL UTF-8 + @Override + public String getValue() throws AccessorException { + readLock(); + try { + b.position(0L); + int length = UTF8StringSerializer.getLength(b); + byte[] bytes = new byte[length]; + b.readFully(bytes); + return new String(bytes, UTF8StringSerializer.UTF8); + } catch (IOException e) { + throw new AccessorException(e); + } finally { + readUnlock(); + } + } - public void setValueNoflush(String string) throws AccessorException { + public void setValueNoflush(String string) throws AccessorException { writeLock(); try { // Write @@ -168,22 +168,22 @@ public class BinaryString extends BinaryObject implements StringAccessor, FileSt } catch (IOException e) { throw new AccessorException(e); - } finally { - writeUnlock(); + } finally { + writeUnlock(); } } */ @Override - public void setValue(String string) throws AccessorException { - assert b.isOpen(); + public void setValue(String string) throws AccessorException { + assert b.isOpen(); writeLock(); try { setValueNoflush(string); b.flush(); } catch (IOException e) { throw new AccessorException(e); - } finally { - writeUnlock(); + } finally { + writeUnlock(); } }