Package org.nfctools.mf.ndef

Source Code of org.nfctools.mf.ndef.AbstractNdefOperations

/**
* Copyright 2011-2012 Adrian Stabiszewski, as@nfctools.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*       http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.nfctools.mf.ndef;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.nfctools.api.TagInfo;
import org.nfctools.mf.tlv.NdefMessageTlv;
import org.nfctools.mf.tlv.Tlv;
import org.nfctools.mf.tlv.TypeLengthValueReader;
import org.nfctools.ndef.NdefContext;
import org.nfctools.ndef.NdefMessage;
import org.nfctools.ndef.NdefMessageDecoder;
import org.nfctools.ndef.NdefOperations;
import org.nfctools.ndef.Record;

public abstract class AbstractNdefOperations implements NdefOperations {

  private TagInfo tagInfo;
  protected boolean formatted;
  protected boolean writable;
  protected List<Record> lastReadRecords;

  protected AbstractNdefOperations(TagInfo tagInfo, boolean formatted, boolean writable) {
    this.tagInfo = tagInfo;
    this.formatted = formatted;
    this.writable = writable;
  }

  @Override
  public boolean hasNdefMessage() {
    if (lastReadRecords != null && !lastReadRecords.isEmpty())
      return true;
    Collection<Record> ndefMessage = readNdefMessage();
    return !ndefMessage.isEmpty();
  }

  @Override
  public boolean isFormatted() {
    return formatted;
  }

  @Override
  public boolean isWritable() {
    return writable;
  }

  @Override
  public void format() {
    format(new Record[0]);
  }

  @Override
  public void formatReadOnly(Record... records) {
    format(records);
    makeReadOnly();
  }

  protected void assertWritable() {
    if (!writable)
      throw new IllegalStateException("Tag not writable");
  }

  protected void assertFormatted() {
    if (!formatted)
      throw new IllegalStateException("Tag not formatted");
  }

  protected byte[] convertRecordsToBytes(Record[] records) {
    if (records.length == 0)
      return new byte[0];
    else {
      return NdefContext.getNdefMessageEncoder().encode(records);
    }
  }

  protected void convertRecords(TypeLengthValueReader reader) {
    lastReadRecords = new ArrayList<Record>();
    NdefMessageDecoder ndefMessageDecoder = NdefContext.getNdefMessageDecoder();
    while (reader.hasNext()) {
      Tlv tlv = reader.next();
      if (tlv instanceof NdefMessageTlv) {
        NdefMessage ndefMessage = ndefMessageDecoder.decode(((NdefMessageTlv)tlv).getNdefMessage());
        for (Record record : ndefMessageDecoder.decodeToRecords(ndefMessage)) {
          lastReadRecords.add(record);
        }
      }
    }
  }

  @Override
  public TagInfo getTagInfo() {
    return tagInfo;
  }
}
TOP

Related Classes of org.nfctools.mf.ndef.AbstractNdefOperations

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.