/*
* Copyright (C) 2012 The Android Open Source 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 com.motorola.studio.android.db.wizards.model;
import com.motorola.studio.android.codeutils.i18n.CodeUtilsNLS;
/**
* This class abstracts a field in a database table.
* */
public class Field
{
/**
* A primary key may be set to be updated incrementally, decrementally or none.
* */
public enum PrimaryKeyBehaviour
{
NONE, INCREMENTAL, DECREMENTAL
};
private String type;
private String name;
private String defaultValue;
private boolean isPrimary;
private PrimaryKeyBehaviour primaryKeyBehaviour;
/**
* @return The behavior of the primary key as described in {@link PrimaryKeyBehaviour}.
* */
public PrimaryKeyBehaviour getPrimaryKeyBehaviour()
{
return primaryKeyBehaviour;
}
/**
* Set the primary key behavior as described in {@link PrimaryKeyBehaviour}.
* */
public void setPrimaryKeyBehaviour(PrimaryKeyBehaviour primaryKeyBehaviour)
{
this.primaryKeyBehaviour = primaryKeyBehaviour;
}
/**
* Constructor that initializes the field name.
* */
public Field(String name)
{
this.name = name;
}
/**
* @return field type.
* */
public String getType()
{
return type;
}
public void setType(String type)
{
this.type = type;
}
/**
* @return field name.
* */
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
/**
* @return The default value used to fill in the field when it has no value in insert statements.
* */
public String getDefaultValue()
{
return defaultValue;
}
public void setDefaultValue(String defaultValue)
{
this.defaultValue = defaultValue;
}
/**
* @return True if this field belongs to the primary key set. Otherwise, returns false.
* */
public boolean isPrimary()
{
return isPrimary;
}
public void setPrimary(boolean isPrimary)
{
this.isPrimary = isPrimary;
}
/**
* @return
* <ul>
* <li>empty string, if {@link PrimaryKeyBehaviour} is set to {@link PrimaryKeyBehaviour#NONE}.</li>
* <li>ASC, if {@link PrimaryKeyBehaviour} is set to {@link PrimaryKeyBehaviour#INCREMENTAL}.</li>
* <li>DESC, if {@link PrimaryKeyBehaviour} is set to {@link PrimaryKeyBehaviour#DECREMENTAL}.</li>
* </ul>
* */
public String getKeyBehaviourQuery()
{
String[] query =
{
"", " ASC", " DESC" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
};
return query[getPrimaryKeyBehaviour().ordinal()];
}
/**
* @return An string describing field property error and {@code null} if there are no errors.
* */
public String getErrorMessage()
{
String message = null;
if (!type.equals("INTEGER") && !type.equals("REAL") //$NON-NLS-1$ //$NON-NLS-2$
&& !primaryKeyBehaviour.equals(PrimaryKeyBehaviour.NONE))
{
message = CodeUtilsNLS.Field_ErrorAutoIncrementNotAllowed;
}
// Validate name to don't use sqlite keywords
if ((message == null) && !Table.validateName(getName()))
{
message = CodeUtilsNLS.AddTableFieldDialog_InvalidName + getName();
}
return message;
}
}