/* CPSCrop.java * Copyright (C) 2007, 2008 Clayton Carter * * This file is part of the project "Crop Planning Software". For more * information: * website: https://github.com/claytonrcarter/cropplanning * email: cropplanning@gmail.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package CPS.Data; import CPS.Data.CPSDatum.CPSDatumState; import CPS.Module.CPSDataModelConstants; import java.util.*; /** * Crop - data structure to hold information about a crop * NOT for a planting of a crop, but just for the crop */ public final class CPSCrop extends CPSRecord { public final static int PROP_CROP_NAME = CPSDataModelConstants.PROP_CROP_NAME; public final static int PROP_CROP_DESC = CPSDataModelConstants.PROP_CROP_DESC; public final static int PROP_VAR_NAME = CPSDataModelConstants.PROP_VAR_NAME; public final static int PROP_FAM_NAME = CPSDataModelConstants.PROP_FAM_NAME; public final static int PROP_BOT_NAME = CPSDataModelConstants.PROP_BOT_NAME; public final static int PROP_MATURITY = CPSDataModelConstants.PROP_MATURITY; public final static int PROP_GROUPS = CPSDataModelConstants.PROP_GROUPS; public final static int PROP_KEYWORDS = CPSDataModelConstants.PROP_KEYWORDS; public final static int PROP_OTHER_REQ = CPSDataModelConstants.PROP_OTHER_REQ; public final static int PROP_NOTES = CPSDataModelConstants.PROP_NOTES; public final static int PROP_FROST_HARDY = CPSDataModelConstants.PROP_FROST_HARDY; public final static int PROP_DIRECT_SEED = CPSDataModelConstants.PROP_DIRECT_SEED; public final static int PROP_DS_MAT_ADJUST = CPSDataModelConstants.PROP_DS_MAT_ADJUST; public final static int PROP_DS_ROWS_P_BED = CPSDataModelConstants.PROP_DS_ROWS_P_BED; public final static int PROP_DS_SPACE_BETROW = CPSDataModelConstants.PROP_DS_SPACE_BETROW; public final static int PROP_DS_PLANT_NOTES = CPSDataModelConstants.PROP_DS_PLANT_NOTES; public final static int PROP_TRANSPLANT = CPSDataModelConstants.PROP_TRANSPLANT; public final static int PROP_TP_MAT_ADJUST = CPSDataModelConstants.PROP_TP_MAT_ADJUST; public final static int PROP_TP_ROWS_BED = CPSDataModelConstants.PROP_TP_ROWS_P_BED; public final static int PROP_TP_SPACE_BETROW = CPSDataModelConstants.PROP_TP_SPACE_BETROW; public final static int PROP_TP_SPACE_INROW = CPSDataModelConstants.PROP_TP_SPACE_INROW; public final static int PROP_TP_TIME_IN_GH = CPSDataModelConstants.PROP_TP_TIME_IN_GH; public final static int PROP_FLAT_SIZE = CPSDataModelConstants.PROP_FLAT_SIZE; public final static int PROP_TP_PLANT_NOTES = CPSDataModelConstants.PROP_TP_PLANT_NOTES; public final static int PROP_POT_UP = CPSDataModelConstants.PROP_TP_POT_UP; public final static int PROP_POT_UP_NOTES = CPSDataModelConstants.PROP_TP_POT_UP_NOTES; public final static int PROP_YIELD_FOOT = CPSDataModelConstants.PROP_YIELD_P_FOOT; public final static int PROP_YIELD_WEEKS = CPSDataModelConstants.PROP_YIELD_NUM_WEEKS; public final static int PROP_YIELD_PER_WEEK = CPSDataModelConstants.PROP_YIELD_P_WEEK; public final static int PROP_CROP_UNIT = CPSDataModelConstants.PROP_CROP_UNIT; public final static int PROP_CROP_UNIT_VALUE = CPSDataModelConstants.PROP_CROP_UNIT_VALUE; public static final int PROP_SEEDS_PER_UNIT = CPSDataModelConstants.PROP_SEEDS_PER_UNIT; public static final int PROP_SEED_UNIT = CPSDataModelConstants.PROP_SEED_UNIT; public static final int PROP_SEEDS_PER_DS = CPSDataModelConstants.PROP_SEEDS_PER_DS; public static final int PROP_SEEDS_PER_TP = CPSDataModelConstants.PROP_SEEDS_PER_TP; public static final String[] SEED_UNIT_STRINGS = { "", "oz", "lb", "g", "kg", "ea", "M (1k)" }; /** * from CPSDataModelConstants: this is the highest value defined there * @return the last (ie highest) property supported by this CPSRecords iterator */ protected int lastValidProperty() { return PROP_YIELD_PER_WEEK; } private CPSDatum<String> cropName; private CPSDatum<String> cropDescription; private CPSDatum<String> varName; private CPSDatum<String> familyName; private CPSDatum<String> botanicalName; // private CPSDatum<Boolean> successions; private CPSDatum<Integer> maturityDays; private CPSDatum<String> groups; private CPSDatum<String> keywords; private CPSDatum<String> otherRequirements; private CPSDatum<String> notes; private CPSDatum<Boolean> frostHardy; private CPSDatum<Boolean> directSeed; private CPSDatum<Integer> dsMatAdjust; private CPSDatum<Integer> dsRowsPerBed; private CPSDatum<Integer> dsRowSpace; private CPSDatum<String> dsPlantNotes; private CPSDatum<Boolean> transplant; private CPSDatum<Integer> tpMatAdjust; private CPSDatum<Integer> tpRowsPerBed; private CPSDatum<Integer> tpRowSpace; private CPSDatum<Integer> tpInRowSpace; private CPSDatum<Integer> tpTimeInGH; private CPSDatum<String> tpFlatSize; private CPSDatum<String> tpPlantNotes; private CPSDatum<Boolean> tpPotUp; private CPSDatum<String> tpPotUpNotes; private CPSDatum<Float> yieldPerFoot; private CPSDatum<Integer> yieldNumWeeks; private CPSDatum<Integer> yieldPerWeek; private CPSDatum<String> cropYieldUnit; private CPSDatum<Float> cropUnitValue; private CPSDatum<Integer> seedsPerUnit; private CPSDatum<String> seedUnit; private CPSDatum<Float> seedsPerDS; private CPSDatum<Float> seedsPerTP; /** * CPSCrop - create a new, blank CPSCrop object */ public CPSCrop() { setRepresentsSingleRecord(); recordID = new CPSDatum<Integer>( "Unique ID", new Integer( -1 ), PROP_ID ); commonIDs = new CPSDatum<ArrayList<Integer>>( "Crop IDs represented", new ArrayList<Integer>(), PROP_COMMON_ID ); cropName = new CPSDatum<String>( "Crop", "Crop name", "", PROP_CROP_NAME ); cropDescription = new CPSDatum<String>( "Description", "Description of crop or variety", "", PROP_CROP_DESC ); varName = new CPSDatum<String>( "Variety", "Variety Name", "", PROP_VAR_NAME ); familyName = new CPSDatum<String>( "Family", "Family name", "", PROP_FAM_NAME ); botanicalName = new CPSDatum<String>( "Botanical name", "" , PROP_BOT_NAME ); maturityDays = new CPSDatum<Integer>( "Days to maturity", new Integer( -1 ), PROP_MATURITY ); groups = new CPSDatum<String>( "Groups", "", PROP_GROUPS ); keywords = new CPSDatum<String>( "Keywords", "", PROP_KEYWORDS ); otherRequirements = new CPSDatum<String>( "Other Requirements", "", PROP_OTHER_REQ ); notes = new CPSDatum<String>( "Notes", "" , PROP_NOTES ); frostHardy = new CPSDatum<Boolean>( "Frost hardy?", new Boolean( null ), PROP_FROST_HARDY ); directSeed = new CPSDatum<Boolean>( "Direct Seeded", new Boolean( null ), PROP_DIRECT_SEED ); dsMatAdjust = new CPSDatum<Integer>( "Adjust Mat. (DS)", new Integer( -1 ), PROP_DS_MAT_ADJUST ); dsRowsPerBed = new CPSDatum<Integer>( "Rows/Bed (DS)", new Integer( -1 ), PROP_DS_ROWS_P_BED ); dsRowSpace = new CPSDatum<Integer>( "Row Spacing (DS)", new Integer( -1 ), PROP_DS_SPACE_BETROW ); dsPlantNotes = new CPSDatum<String>( "Notes for DS", "" , PROP_DS_PLANT_NOTES ); transplant = new CPSDatum<Boolean>( "Transplant", new Boolean( null ), PROP_TRANSPLANT ); tpMatAdjust = new CPSDatum<Integer>( "Adjust Mat. (TP)", new Integer( -1 ), PROP_TP_MAT_ADJUST ); tpRowsPerBed = new CPSDatum<Integer>( "Rows/Bed (TP)", new Integer( -1 ), PROP_TP_ROWS_BED ); tpRowSpace = new CPSDatum<Integer>( "Row Spacing (TP)", new Integer( -1 ), PROP_TP_SPACE_BETROW ); tpInRowSpace = new CPSDatum<Integer>( "In-Row Spacing (TP)", new Integer( -1 ), PROP_TP_SPACE_INROW ); tpTimeInGH = new CPSDatum<Integer>( "Time to TP", new Integer( -1 ), PROP_TP_TIME_IN_GH ); tpFlatSize = new CPSDatum<String>( "Flat Size", "", PROP_FLAT_SIZE ); tpPlantNotes = new CPSDatum<String>( "Notes for TP", "", PROP_TP_PLANT_NOTES ); tpPotUp = new CPSDatum<Boolean>( "Pot Up", new Boolean( null ), PROP_POT_UP ); tpPotUpNotes = new CPSDatum<String>( "Notes for Potting Up", "" , PROP_POT_UP_NOTES ); // yieldPerFoot = new CPSDatum<Float>( "Yield/Foot", new Float( -1.0 ), PROP_YIELD_FOOT ); yieldPerFoot = new CPSDatum<Float>( "Yield/Foot", new Float( -1.0 ), PROP_YIELD_FOOT ); yieldNumWeeks = new CPSDatum<Integer>( "Yield for Weeks", new Integer( -1 ), PROP_YIELD_WEEKS ); yieldPerWeek = new CPSDatum<Integer>( "Yield/Week", new Integer( -1 ), PROP_YIELD_PER_WEEK ); cropYieldUnit = new CPSDatum<String>( "Yield Unit", "", PROP_CROP_UNIT ); cropUnitValue = new CPSDatum<Float>( "Value/Unit", new Float(-1.0) , PROP_CROP_UNIT_VALUE ); seedsPerUnit = new CPSDatum<Integer>( "Seeds/Unit", new Integer(-1), PROP_SEEDS_PER_UNIT ); seedUnit = new CPSDatum<String>( "Units", "", PROP_SEED_UNIT ); seedsPerDS = new CPSDatum<Float>( "Seeds/RowFt (DS)", new Float( -1.0 ), PROP_SEEDS_PER_DS ); seedsPerTP = new CPSDatum<Float>( "Seeds/Plant (TP)", new Float( -1.0 ), PROP_SEEDS_PER_TP ); } public CPSDatum getDatum( int prop ) { /* very ugly, but this allows us to use the hierarchy of Crop properties */ switch ( prop ) { case PROP_CROP_NAME: return cropName; case PROP_CROP_DESC: return cropDescription; case PROP_VAR_NAME: return varName; case PROP_FAM_NAME: return familyName; case PROP_BOT_NAME: return botanicalName; case PROP_MATURITY: return maturityDays; case PROP_GROUPS: return groups; case PROP_KEYWORDS: return keywords; case PROP_OTHER_REQ: return otherRequirements; case PROP_NOTES: return notes; case PROP_FROST_HARDY: return frostHardy; case PROP_DIRECT_SEED: return directSeed; case PROP_DS_MAT_ADJUST: return dsMatAdjust; case PROP_DS_ROWS_P_BED: return dsRowsPerBed; case PROP_DS_SPACE_BETROW: return dsRowSpace; case PROP_DS_PLANT_NOTES: return dsPlantNotes; case PROP_TRANSPLANT: return transplant; case PROP_TP_MAT_ADJUST: return tpMatAdjust; case PROP_TP_ROWS_BED: return tpRowsPerBed; case PROP_TP_SPACE_BETROW: return tpRowSpace; case PROP_TP_SPACE_INROW: return tpInRowSpace; case PROP_TP_TIME_IN_GH: return tpTimeInGH; case PROP_FLAT_SIZE: return tpFlatSize; case PROP_TP_PLANT_NOTES: return tpPlantNotes; case PROP_POT_UP: return tpPotUp; case PROP_POT_UP_NOTES: return tpPotUpNotes; case PROP_YIELD_FOOT: return yieldPerFoot; case PROP_YIELD_WEEKS: return yieldNumWeeks; case PROP_YIELD_PER_WEEK: return yieldPerWeek; case PROP_CROP_UNIT: return cropYieldUnit; case PROP_CROP_UNIT_VALUE: return cropUnitValue; case PROP_SEEDS_PER_UNIT: return seedsPerUnit; case PROP_SEED_UNIT: return seedUnit; case PROP_SEEDS_PER_DS: return seedsPerDS; case PROP_SEEDS_PER_TP: return seedsPerTP; default: return super.getDatum( prop ); } } public ArrayList<Integer> getListOfInheritableProperties() { ArrayList<Integer> a = new ArrayList<Integer>(); a.add( PROP_VAR_NAME ); a.add( PROP_FAM_NAME ); a.add( PROP_BOT_NAME ); a.add( PROP_MATURITY ); a.add( PROP_GROUPS ); a.add( PROP_KEYWORDS ); a.add( PROP_OTHER_REQ ); a.add( PROP_FROST_HARDY ); a.add( PROP_DIRECT_SEED ); a.add( PROP_DS_MAT_ADJUST ); a.add( PROP_DS_ROWS_P_BED ); a.add( PROP_DS_SPACE_BETROW ); a.add( PROP_DS_PLANT_NOTES ); a.add( PROP_TRANSPLANT ); a.add( PROP_TP_MAT_ADJUST ); a.add( PROP_TP_ROWS_BED ); a.add( PROP_TP_SPACE_BETROW ); a.add( PROP_TP_SPACE_INROW ); a.add( PROP_TP_TIME_IN_GH ); a.add( PROP_FLAT_SIZE ); a.add( PROP_TP_PLANT_NOTES ); a.add( PROP_POT_UP ); a.add( PROP_POT_UP_NOTES ); a.add( PROP_YIELD_FOOT ); a.add( PROP_YIELD_WEEKS ); a.add( PROP_YIELD_PER_WEEK ); a.add( PROP_CROP_UNIT ); a.add( PROP_CROP_UNIT_VALUE ); a.add( PROP_SEEDS_PER_UNIT ); a.add( PROP_SEED_UNIT ); a.add( PROP_SEEDS_PER_DS ); a.add( PROP_SEEDS_PER_TP ); return a; } @Override public void finishUp () { /* nothing to do here */ } @Override public void updateCalculations() { /* nothing to do here */ } public String getCropName() { return get( PROP_CROP_NAME ); } public CPSDatumState getCropNameState() { return getStateOf( PROP_CROP_NAME ); } public void setCropName( String s ) { set( cropName, s ); } public String getCropDescription() { return get( PROP_CROP_DESC ); } public CPSDatumState getCropDescriptionState() { return getStateOf( PROP_CROP_DESC ); } public void setCropDescription( String s ) { set( cropDescription, s ); } public String getVarietyName() { return get( PROP_VAR_NAME ); } public CPSDatumState getVarietyNameState() { return getStateOf( PROP_VAR_NAME ); } public void setVarietyName( String s ) { set( varName, s ); } public String getFamilyName() { return get( PROP_FAM_NAME ); } public CPSDatumState getFamilyNameState() { return getStateOf( PROP_FAM_NAME ); } public void setFamilyName( String e ) { set( familyName, parseInheritableString(e) ); } public String getBotanicalName() { return get( PROP_BOT_NAME ); } public CPSDatumState getBotanicalNameState() { return getStateOf( PROP_BOT_NAME ); } public void setBotanicalName( String e ) { set( botanicalName, parseInheritableString(e) ); } public Integer getMaturityDays() { return getInt( PROP_MATURITY ); } public String getMaturityDaysString() { return getString( PROP_MATURITY ); } public CPSDatumState getMaturityDaysState() { return getStateOf( PROP_MATURITY ); } public void setMaturityDays( Integer i ) { set( maturityDays, i ); } public void setMaturityDays( int i ) { setMaturityDays( new Integer( i ) ); } public void setMaturityDays( String s ) { setMaturityDays( parseInteger( s ) ); } public String getGroups() { return get( PROP_GROUPS ); } public CPSDatumState getGroupsState() { return getStateOf( PROP_GROUPS ); } public void setGroups( String e ) { set( groups, parseInheritableString(e) ); } public String getKeywords() { return get( PROP_KEYWORDS ); } public CPSDatumState getKeywordsState() { return getStateOf( PROP_KEYWORDS ); } public void setKeywords( String e ) { set( keywords, parseInheritableString(e) ); } public String getNotes() { return get( PROP_NOTES ); } public CPSDatumState getNotesState() { return getStateOf( PROP_NOTES ); } public void setNotes( String e ) { set( notes, e ); } public String getOtherRequirements() { return get( PROP_OTHER_REQ ); } public CPSDatumState getOtherRequirementsState() { return getStateOf( PROP_OTHER_REQ ); } public void setOtherRequirements( String e ) { set( otherRequirements, parseInheritableString(e) ); } public Boolean isFrostHardy() { return getBoolean( PROP_FROST_HARDY ); } public Boolean isFrostTender() { return ! isFrostHardy().booleanValue(); } public CPSDatumState getFrostHardyState() { return getStateOf( PROP_FROST_HARDY ); } public void setFrostHardy( String s ) { if ( s != null && s.equalsIgnoreCase("true") ) setFrostHardy( Boolean.TRUE ); else setFrostHardy( Boolean.FALSE ); } public void setFrostHardy( Boolean b ) { set( frostHardy, b ); } public void setFrostHardy( boolean b ) { setFrostHardy( b ); } /* * DIRECT SEEDING STATS */ public Boolean isDirectSeeded() { return getBoolean( PROP_DIRECT_SEED ); } public CPSDatumState getDirectSeededState() { return getStateOf( PROP_DIRECT_SEED ); } public void setDirectSeeded( String s ) { if ( s != null && s.equalsIgnoreCase("true") ) setDirectSeeded( Boolean.TRUE ); else setDirectSeeded( Boolean.FALSE ); } public void setDirectSeeded( Boolean b ) { set( directSeed, b ); } public void setDirectSeeded( boolean b ) { setDirectSeeded( new Boolean( b )); } public Integer getDSMaturityAdjust() { return getInt( PROP_DS_MAT_ADJUST ); } public String getDSMaturityAdjustString() { return getString( PROP_DS_MAT_ADJUST ); } public CPSDatumState getDSMaturityAdjustState() { return getStateOf( PROP_DS_MAT_ADJUST ); } public void setDSMaturityAdjust( Integer i ) { set( dsMatAdjust, i ); } public void setDSMaturityAdjust( int i ) { set( dsMatAdjust, new Integer( i ) ); } public void setDSMaturityAdjust( String s ) { setDSMaturityAdjust( parseInteger(s) ); } public Integer getDSRowsPerBed() { return getInt( PROP_DS_ROWS_P_BED ); } public String getDSRowsPerBedString() { return getString( PROP_DS_ROWS_P_BED ); } public CPSDatumState getDSRowsPerBedState() { return getStateOf( PROP_DS_ROWS_P_BED ); } public void setDSRowsPerBed( Integer i ) { set( dsRowsPerBed, i ); } public void setDSRowsPerBed( int i ) { set( dsRowsPerBed, new Integer( i )); } public void setDSRowsPerBed( String s ) { setDSRowsPerBed( parseInteger(s) ); } public Integer getDSSpaceBetweenRow() { return getInt( PROP_DS_SPACE_BETROW ); } public String getDSSpaceBetweenRowString() { return getString( PROP_DS_SPACE_BETROW ); } public CPSDatumState getDSSpaceBetweenRowState() { return getStateOf( PROP_DS_SPACE_BETROW ); } public void setDSSpaceBetweenRow( Integer i ) { set( dsRowSpace, i ); } public void setDSSpaceBetweenRow( int i ) { set( dsRowSpace, new Integer( i ) ); } public void setDSSpaceBetweenRow( String s ) { setDSSpaceBetweenRow( parseInteger(s) ); } public String getDSPlantNotes() { return get( PROP_DS_PLANT_NOTES ); } public CPSDatumState getDSPlantNotesState() { return getStateOf( PROP_DS_PLANT_NOTES ); } public void setDSPlantNotes( String s ) { set( dsPlantNotes, parseInheritableString(s) ); } /* * TRANSPLANT STATS */ public Boolean isTransplanted() { return getBoolean( PROP_TRANSPLANT ); } public CPSDatumState getTransplantedState() { return getStateOf( PROP_TRANSPLANT ); } public void setTransplanted( String s ) { if ( s != null && s.equalsIgnoreCase("true") ) setTransplanted( Boolean.TRUE ); else setTransplanted( Boolean.FALSE ); } public void setTransplanted( Boolean b ) { set( transplant, b ); } public void setTransplanted( boolean b ) { setTransplanted( new Boolean( b )); } public Integer getTPMaturityAdjust() { return getInt( PROP_TP_MAT_ADJUST ); } public String getTPMaturityAdjustString() { return getString( PROP_TP_MAT_ADJUST ); } public CPSDatumState getTPMaturityAdjustState() { return getStateOf( PROP_TP_MAT_ADJUST ); } public void setTPMaturityAdjust( Integer i ) { set( tpMatAdjust, i ); } public void setTPMaturityAdjust( int i ) { setTPMaturityAdjust( new Integer( i ) ); } public void setTPMaturityAdjust( String s ) { setTPMaturityAdjust( parseInteger(s) ); } public Integer getTPRowsPerBed() { return getInt( PROP_TP_ROWS_BED ); } public String getTPRowsPerBedString() { return getString( PROP_TP_ROWS_BED ); } public CPSDatumState getTPRowsPerBedState() { return getStateOf( PROP_TP_ROWS_BED ); } public void setTPRowsPerBed( Integer i ) { set( tpRowsPerBed, i ); } public void setTPRowsPerBed( int i ) { setTPRowsPerBed( new Integer( i ) ); } public void setTPRowsPerBed( String s ) { setTPRowsPerBed( parseInteger(s) ); } public Integer getTPSpaceBetweenRow() { return getInt( PROP_TP_SPACE_BETROW ); } public String getTPSpaceBetweenRowString() { return getString( PROP_TP_SPACE_BETROW ); } public CPSDatumState getTPSpaceBetweenRowState() { return getStateOf( PROP_TP_SPACE_BETROW ); } public void setTPSpaceBetweenRow( Integer i ) { set( tpRowSpace, i ); } public void setTPSpaceBetweenRow( int i ) { setTPSpaceBetweenRow( new Integer( i ) ); } public void setTPSpaceBetweenRow( String s ) { setTPSpaceBetweenRow( parseInteger(s) ); } public Integer getTPSpaceInRow() { return getInt( PROP_TP_SPACE_INROW ); } public String getTPSpaceInRowString() { return getString( PROP_TP_SPACE_INROW ); } public CPSDatumState getTPSpaceInRowState() { return getStateOf( PROP_TP_SPACE_INROW ); } public void setTPSpaceInRow( Integer i ) { set( tpInRowSpace, i ); } public void setTPSpaceInRow( int i ) { setTPSpaceInRow( new Integer( i ) ); } public void setTPSpaceInRow( String s ) { setTPSpaceInRow( parseInteger(s) ); } public Integer getTPTimeInGH() { return getInt( PROP_TP_TIME_IN_GH ); } public String getTPTimeInGHString() { return getString( PROP_TP_TIME_IN_GH ); } public CPSDatumState getTPTimeInGHState() { return getStateOf( PROP_TP_TIME_IN_GH ); } public void setTPTimeInGH( Integer i ) { set( tpTimeInGH, i ); } public void setTPTimeInGH( int i ) { setTPTimeInGH( new Integer( i ) ); } public void setTPTimeInGH( String s ) { setTPTimeInGH( parseInteger(s) ); } public String getTPFlatSize() { return get( PROP_FLAT_SIZE ); } public CPSDatumState getTPFlatSizeState() { return getStateOf( PROP_FLAT_SIZE ); } public void setTPFlatSize( String s ) { set( tpFlatSize, parseInheritableString(s) ); } public String getTPPlantNotes() { return get( PROP_TP_PLANT_NOTES ); } public CPSDatumState getTPPlantNotesState() { return getStateOf( PROP_TP_PLANT_NOTES ); } public void setTPPlantNotes( String s ) { set( tpPlantNotes, parseInheritableString(s) ); } public Boolean isPottedUp() { return getBoolean( PROP_POT_UP ); } public CPSDatumState getTPPottedUpState() { return getStateOf( PROP_POT_UP); } public void setTPPottedUp( String s ) { if ( s != null && s.equalsIgnoreCase("true") ) setTPPottedUp( true ); else setTPPottedUp( false ); } public void setTPPottedUp( Boolean b ) { set( tpPotUp, b ); } public void setTPPottedUp( boolean b ) { setTPPottedUp( new Boolean(b) ); } public String getTPPotUpNotes() { return get( PROP_POT_UP_NOTES ); } public CPSDatumState getTPPotUpNotesState() { return getStateOf( PROP_POT_UP_NOTES ); } public void setTPPotUpNotes( String s ) { set( tpPotUpNotes, parseInheritableString(s) ); } public Float getYieldPerFoot() { return getFloat( PROP_YIELD_FOOT ); } public String getYieldPerFootString() { return formatFloat( (Float) get( PROP_YIELD_FOOT ) ); } public CPSDatumState getYieldPerFootState() { return getStateOf( PROP_YIELD_FOOT ); } public void setYieldPerFoot( Float f ) { set( yieldPerFoot, f ); } public void setYieldPerFoot( float f ) { setYieldPerFoot( new Float( f ) ); } public void setYieldPerFoot( String s ) { setYieldPerFoot( parseFloatBigF(s) ); } public Integer getYieldNumWeeks() { return getInt( PROP_YIELD_WEEKS ); } public String getYieldNumWeeksString() { return getString( PROP_YIELD_WEEKS ); } public CPSDatumState getYieldNumWeeksState() { return getStateOf( PROP_YIELD_WEEKS ); } public void setYieldNumWeeks( Integer i ) { set( yieldNumWeeks, i ); } public void setYieldNumWeeks( int i ) { setYieldNumWeeks( new Integer( i )); } public void setYieldNumWeeks( String s ) { setYieldNumWeeks( parseInteger(s) ); } public Integer getYieldPerWeek() { return getInt( PROP_YIELD_PER_WEEK ); } public String getYieldPerWeekString() { return getString( PROP_YIELD_PER_WEEK ); } public CPSDatumState getYieldPerWeekState() { return getStateOf( PROP_YIELD_PER_WEEK ); } public void setYieldPerWeek( Integer i ) { set( yieldPerWeek, i ); } public void setYieldPerWeek( int i ) { setYieldPerWeek( new Integer( i )); } public void setYieldPerWeek( String s ) { setYieldPerWeek( parseInteger(s) ); } public String getCropYieldUnit() { return get( PROP_CROP_UNIT ); } public CPSDatumState getCropYieldUnitState() { return getStateOf( PROP_CROP_UNIT ); } public void setCropYieldUnit( String s ) { set( cropYieldUnit, parseInheritableString(s) ); } public Float getCropUnitValue() { return getFloat( PROP_CROP_UNIT_VALUE ); } public String getCropUnitValueString() { return formatFloat( (Float) get( PROP_CROP_UNIT_VALUE ) ); } public CPSDatumState getCropUnitValueState() { return getStateOf( PROP_CROP_UNIT_VALUE ); } public void setCropUnitValue( Float f ) { set( cropUnitValue, f ); } public void setCropUnitValue( float f ) { setCropUnitValue( new Float( f )); } public void setCropUnitValue( String s ) { setCropUnitValue( parseFloatBigF(s) ); } public Integer getSeedsPerUnit() { return getInt( seedsPerUnit.getPropertyNum() ); } public String getSeedsPerUnitString() { return getString( seedsPerUnit.getPropertyNum() ); } public CPSDatumState getSeedsPerUnitState() { return getStateOf( seedsPerUnit.getPropertyNum() ); } public void setSeedsPerUnit( Integer i ) { set( seedsPerUnit, i ); } public void setSeedsPerUnit( int i ) { setSeedsPerUnit( new Integer( i )); } public void setSeedsPerUnit( String s ) { setSeedsPerUnit( parseInteger(s) ); } public String getSeedUnit() { return get( seedUnit.getPropertyNum() ); } public CPSDatumState getSeedUnitState() { return getStateOf( seedUnit.getPropertyNum() ); } public void setSeedUnit( String s ) { set( seedUnit, parseInheritableString(s) ); } public Float getSeedsPerDS() { return getFloat( seedsPerDS.getPropertyNum() ); } public String getSeedsPerDSString() { return getString( seedsPerDS.getPropertyNum() ); } public CPSDatumState getSeedsPerDSState() { return getStateOf( seedsPerDS.getPropertyNum() ); } public void setSeedsPerDS( Float i ) { set( seedsPerDS, i ); } public void setSeedsPerDS( float i ) { setSeedsPerDS( new Float( i )); } public void setSeedsPerDS( String s ) { setSeedsPerDS( parseFloatBigF(s) ); } public Float getSeedsPerTP() { return getFloat( seedsPerTP.getPropertyNum() ); } public String getSeedsPerTPString() { return formatFloat( (Float) get( seedsPerTP.getPropertyNum() ) ); } public CPSDatumState getSeedsPerTPState() { return getStateOf( seedsPerTP.getPropertyNum() ); } public void setSeedsPerTP( Float f ) { set( seedsPerTP, f ); } public void setSeedsPerTP( float f ) { setSeedsPerTP( new Float( f )); } public void setSeedsPerTP( String s ) { setSeedsPerTP( parseFloatBigF(s) ); } public CPSRecord diff( CPSRecord thatCrop ) { return super.diff( thatCrop, new CPSCrop() ); } /* Iterator */ public CropIterator iterator() { return new CropIterator(); } public class CropIterator extends CPSRecordIterator { public boolean ignoreThisProperty() { return this.currentProp == PROP_ID; } } public String toString() { String s = ""; CropIterator i = this.iterator(); CPSDatum c; while ( i.hasNext() ) { c = i.next(); if ( c.isNotNull() ) { s += c.getName() + " = '" + c.getValue() + "'"; if ( c.isInherited() ) s += "(i)"; if ( c.isCalculated() ) s += "(c)"; s += ", "; } } return s; } /** Returns true if this CPSCrop object represents a "crop". * * Returns true if and only if the crop name is valid and the variety name is invalid. */ public boolean isCrop() { return cropName.isNotNull() && ! varName.isNotNull(); } /** Returns true if this CPSCrop object represents a "variety". * * Returns true if and only if both the crop name and the variety name are valid. */ public boolean isVariety() { return cropName.isNotNull() && varName.isNotNull(); } }