All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.ontopia.topicmaps.db2tm.Field Maven / Gradle / Ivy

The newest version!
/*
 * #!
 * Ontopia DB2TM
 * #-
 * Copyright (C) 2001 - 2013 The Ontopia Project
 * #-
 * 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 net.ontopia.topicmaps.db2tm;

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

/**
 * INTERNAL: Relation mapping concept that refers to a field
 * definition belonging to an entity. There are two categories of
 * fields: identity fields and characteristic fields.
 */
public class Field {

  // field type enumeration
  public static final int TYPE_SUBJECT_LOCATOR = 1;
  public static final int TYPE_SUBJECT_IDENTIFIER = 2;
  public static final int TYPE_ITEM_IDENTIFIER = 4;
  public static final int TYPE_TOPIC_NAME = 8;
  public static final int TYPE_OCCURRENCE = 16;
  public static final int TYPE_PLAYER = 32;
  public static final int TYPE_ASSOCIATION_ROLE = 64;

  // field type
  protected final int ftype;
  protected final Entity entity;
  
  // subject-locator, subject-identifier, item-identifier
  protected String column;
  protected String pattern;

  // occurrence,topic-name 
  protected String type;
  protected String[] scope;
  protected String datatype;

  // role+other
  protected String atype;
  protected String rtype;
  protected String player;
  protected List oroles = new ArrayList();

  public static final int OPTIONAL_DEFAULT = 0;
  public static final int OPTIONAL_TRUE = 1;
  public static final int OPTIONAL_FALSE = 2;
  protected int optional = OPTIONAL_DEFAULT;

  protected ValueIF cvalue;
  
  Field(int ftype, Entity entity) {
    this.ftype = ftype;
    this.entity = entity;
  }

  public void compile() {
    compileValue();
  }

  public Entity getEntity() {
    return entity;
  }
  
  public int getFieldType() {
    return ftype;
  }

  public String getColumn() {
    return column;
  }

  public void setColumn(String column) {
    this.column = column;
  }

  public String getPattern() {
    return pattern;
  }

  public void setPattern(String pattern) {
    this.pattern = pattern;
  }

  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }

  public String getDatatype() {
    return datatype;
  }

  public void setDatatype(String datatype) {
    this.datatype = datatype;
  }

  public String[] getScope() {
    return scope;
  }

  public void setScope(String[] scope) {
    this.scope = scope;
  }

  public int getOptional() {
    return optional;
  }

  public void setOptional(boolean optional) {
    this.optional = (optional ? OPTIONAL_TRUE : OPTIONAL_FALSE);
  }
  
  public String getAssociationType() {
    return atype;
  }

  public void setAssociationType(String atype) {
    this.atype = atype;
  }

  public String getRoleType() {
    return rtype;
  }

  public void setRoleType(String rtype) {
    this.rtype = rtype;
  }

  public String getPlayer() {
    return player;
  }

  public void setPlayer(String player) {
    this.player = player;
  }

  public void addOtherRoleField(Field orole) {
    oroles.add(orole);
  }
  
  public List getOtherRoleFields() { // TYPE_PLAYER only
    return oroles;
  }

  // -- pattern
  
  public String getValue(String[] tuple) {
    return cvalue.getValue(tuple);
  }
  
  protected void compileValue() {
    if (getFieldType() != TYPE_PLAYER &&
        getFieldType() != TYPE_ASSOCIATION_ROLE) {
      Relation relation = getEntity().getRelation();
      String column = getColumn();
      this.cvalue = (column != null)
        ? Values.getColumnValue(relation, column)
        : Values.getPatternValue(relation, getPattern());
    }
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy