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

org.jbundle.main.msg.db.MessageControl Maven / Gradle / Ivy

There is a newer version: 1.0.11
Show newest version
/**
 * @(#)MessageControl.
 * Copyright © 2013 jbundle.org. All rights reserved.
 * GPL3 Open Source Software License.
 */
package org.jbundle.main.msg.db;

import java.util.*;

import org.jbundle.base.db.*;
import org.jbundle.thin.base.util.*;
import org.jbundle.thin.base.db.*;
import org.jbundle.base.db.event.*;
import org.jbundle.base.db.filter.*;
import org.jbundle.base.field.*;
import org.jbundle.base.field.convert.*;
import org.jbundle.base.field.event.*;
import org.jbundle.base.model.*;
import org.jbundle.base.util.*;
import org.jbundle.model.*;
import org.jbundle.model.db.*;
import org.jbundle.model.screen.*;
import org.jbundle.model.main.msg.db.*;

/**
 *  MessageControl - Message control information.
 */
public class MessageControl extends ControlRecord
     implements MessageControlModel
{
    private static final long serialVersionUID = 1L;

    /**
     * Default constructor.
     */
    public MessageControl()
    {
        super();
    }
    /**
     * Constructor.
     */
    public MessageControl(RecordOwner screen)
    {
        this();
        this.init(screen);
    }
    /**
     * Initialize class fields.
     */
    public void init(RecordOwner screen)
    {
        super.init(screen);
    }
    /**
     * Get the table name.
     */
    public String getTableNames(boolean bAddQuotes)
    {
        return (m_tableName == null) ? Record.formatTableNames(MESSAGE_CONTROL_FILE, bAddQuotes) : super.getTableNames(bAddQuotes);
    }
    /**
     * Get the Database Name.
     */
    public String getDatabaseName()
    {
        return "main";
    }
    /**
     * Is this a local (vs remote) file?.
     */
    public int getDatabaseType()
    {
        return DBConstants.LOCAL | DBConstants.USER_DATA;
    }
    /**
     * Add this field in the Record's field sequence.
     */
    public BaseField setupField(int iFieldSeq)
    {
        BaseField field = null;
        //if (iFieldSeq == 0)
        //{
        //  field = new CounterField(this, ID, Constants.DEFAULT_FIELD_LENGTH, null, null);
        //  field.setHidden(true);
        //}
        //if (iFieldSeq == 1)
        //{
        //  field = new RecordChangedField(this, LAST_CHANGED, Constants.DEFAULT_FIELD_LENGTH, null, null);
        //  field.setHidden(true);
        //}
        //if (iFieldSeq == 2)
        //{
        //  field = new BooleanField(this, DELETED, Constants.DEFAULT_FIELD_LENGTH, null, new Boolean(false));
        //  field.setHidden(true);
        //}
        if (iFieldSeq == 3)
            field = new PropertiesField(this, PROPERTIES, Constants.DEFAULT_FIELD_LENGTH, null, null);
        if (iFieldSeq == 4)
            field = new StringField(this, WEB_SERVICES_SERVER, 128, null, "/ws");
        if (iFieldSeq == 5)
            field = new MessageVersionField(this, DEFAULT_VERSION_ID, 20, null, null);
        if (iFieldSeq == 6)
            field = new URLField(this, BASE_NAMESPACE, Constants.DEFAULT_FIELD_LENGTH, null, null);
        if (iFieldSeq == 7)
            field = new URLField(this, BASE_SCHEMA_LOCATION, Constants.DEFAULT_FIELD_LENGTH, null, null);
        if (iFieldSeq == 8)
            field = new MessageTransportField(this, WEB_MESSAGE_TRANSPORT_ID, Constants.DEFAULT_FIELD_LENGTH, null, null);
        if (field == null)
            field = super.setupField(iFieldSeq);
        return field;
    }
    /**
     * Add this key area description to the Record.
     */
    public KeyArea setupKey(int iKeyArea)
    {
        KeyArea keyArea = null;
        if (iKeyArea == 0)
        {
            keyArea = this.makeIndex(DBConstants.UNIQUE, ID_KEY);
            keyArea.addKeyField(ID, DBConstants.ASCENDING);
        }
        if (keyArea == null)
            keyArea = super.setupKey(iKeyArea);     
        return keyArea;
    }
    /**
     * Add all standard file & field behaviors.
     * Override this to add record listeners and filters.
     */
    public void addListeners()
    {
        super.addListeners();
        Map map = Utility.arrayToMap(DESCRIPTIONS);
        ((PropertiesField)this.getField(MessageControl.PROPERTIES)).setMapKeyDescriptions(map);
    }
    /**
     * GetDefaultNamespace Method.
     */
    public String getDefaultNamespace()
    {
        return this.getNamespaceFromVersion(null);
    }
    /**
     * GetNamespaceFromVersion Method.
     */
    public String getNamespaceFromVersion(String version)
    {
        MessageVersion recMessageVersion = this.getMessageVersion(version);
        String namespace = this.getField(MessageControl.BASE_NAMESPACE).toString();
        if (namespace == null)
            namespace = DBConstants.BLANK;
        if ((recMessageVersion != null) && (!recMessageVersion.getField(MessageVersion.NAMESPACE).isNull()))
                namespace += recMessageVersion.getField(MessageVersion.NAMESPACE).toString();
        return namespace;
    }
    /**
     * GetSchemaLocation Method.
     */
    public String getSchemaLocation(String version, String schemaLocation)
    {
        if (schemaLocation != null)
            if ((schemaLocation.startsWith("http")) || (schemaLocation.startsWith("/")))
                return schemaLocation;
        MessageVersion recMessageVersion = this.getMessageVersion(version);
        return this.getSchemaLocation(recMessageVersion, schemaLocation);
    }
    /**
     * GetSchemaLocation Method.
     */
    public String getSchemaLocation(MessageVersion recMessageVersion, String schemaLocation)
    {
        String location = this.getField(MessageControl.BASE_SCHEMA_LOCATION).toString();
        if (location == null)
            location = DBConstants.BLANK;
        else if (!location.endsWith("/"))
            location += "/";
        if ((recMessageVersion != null) && (!recMessageVersion.getField(MessageVersion.SCHEMA_LOCATION).isNull()))
            location = location + recMessageVersion.getField(MessageVersion.SCHEMA_LOCATION).toString();
        else
            location = location + recMessageVersion.getField(MessageVersion.CODE).toString();
        if (location != null)
        {
            if (!location.endsWith("/"))
                location += "/";
            return location + schemaLocation;
        }
        return schemaLocation;
    }
    /**
     * GetMessageVersion Method.
     */
    public MessageVersion getMessageVersion()
    {
        return (MessageVersion)((ReferenceField)this.getField(MessageControl.DEFAULT_VERSION_ID)).getReferenceRecord();
    }
    /**
     * GetMessageVersion Method.
     */
    public MessageVersion getMessageVersion(String version)
    {
        MessageVersion recMessageVersion = this.getMessageVersion();
        recMessageVersion.setKeyArea(MessageVersion.CODE_KEY);
        version = MessageControl.fixVersion(version);
        recMessageVersion.getField(MessageVersion.CODE).setString(version);
        try {
            if (version != null)
                if (recMessageVersion.seek(DBConstants.EQUALS))
            {
                return recMessageVersion;
            }
        } catch (DBException e) {
            e.printStackTrace();
        }
        return (MessageVersion)((ReferenceField)this.getField(MessageControl.DEFAULT_VERSION_ID)).getReference();
    }
    /**
     * GetNumericVersionFromVersion Method.
     */
    public String getNumericVersionFromVersion(String version)
    {
        MessageVersion recMessageVersion = this.getMessageVersion(version);
        String numericVersion = DBConstants.BLANK;
        if ((recMessageVersion != null) && (!recMessageVersion.getField(MessageVersion.NAMESPACE).isNull()))
            numericVersion = recMessageVersion.getField(MessageVersion.NUMERIC_VERSION).toString();
        if ((numericVersion == null) || (numericVersion.length() == 0))
            numericVersion = "1.000";
        return numericVersion;
    }
    /**
     * GetIdFromVersion Method.
     */
    public String getIdFromVersion(String version)
    {
        MessageVersion recMessageVersion = this.getMessageVersion(version);
        String idVersion = DBConstants.BLANK;
        if ((idVersion != null) && (!recMessageVersion.getField(MessageVersion.NAMESPACE).isNull()))
            idVersion = recMessageVersion.getField(MessageVersion.VERSION_ID).toString();
        if ((idVersion == null) || (idVersion.length() == 0))
            idVersion = "OTA" + version;
        return idVersion;
    }
    /**
     * FixVersion Method.
     */
    public static String fixVersion(String version)
    {
        if (version != null)
            if (version.length() > 0)
        {
            version = version.toUpperCase();
            if (Character.isLetter(version.charAt(0)))
                version = version.substring(1, version.length()) + version.substring(0, 1); // Move letter to start
        }
        return version;
    }
    /**
     * GetVersionFromSchemaLocation Method.
     */
    public String getVersionFromSchemaLocation(String schemaLocation)
    {
        MessageVersion recMessageVersion = this.getMessageVersion();
        recMessageVersion.close();
        try {
            while (recMessageVersion.hasNext())
            {
                recMessageVersion.next();
                String messageSchemaLocation = this.getSchemaLocation(recMessageVersion, DBConstants.BLANK);
                if (schemaLocation.startsWith(messageSchemaLocation))
                    return recMessageVersion.getField(MessageVersion.CODE).toString();
            }
        } catch (DBException e) {
            e.printStackTrace();
        }
        return null;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy