001    package org.cumulus4j.store.datastoreversion.command;
002    
003    import org.cumulus4j.store.datastoreversion.AbstractDatastoreVersionCommand;
004    import org.cumulus4j.store.datastoreversion.CommandApplyParam;
005    import org.slf4j.Logger;
006    import org.slf4j.LoggerFactory;
007    
008    public class MinimumCumulus4jVersion extends AbstractDatastoreVersionCommand {
009            private static final Logger logger = LoggerFactory.getLogger(MinimumCumulus4jVersion.class);
010    
011            private int version = -1;
012    
013            /**
014             * {@inheritDoc}
015             * <p>
016             * The version returned by the implementation of this method in {@link MinimumCumulus4jVersion} is the
017             * lowest version of cumulus4j that runs with the current datastore.
018             * <p>
019             * In other words: This version here must be set to the current Cumulus4j version,
020             * if a lower version of Cumulus4j cannot be used with the datastore structure represented by the current source code,
021             * anymore.
022             * <p>
023             * This version is composed of the following parts:
024             * <ul>
025             * <li>major: 1 or 2 digits
026             * <li>minor: 2 digits
027             * <li>release: 2 digits
028             * <li>serial: 3 digits
029             * </ul>
030             * <p>
031             * For example, the 3rd non-downgradable change to the version <i>9.08.07-SNAPSHOT</i> would result in the numeric
032             * result <i>90807002</i> (the serial starts at 0, hence 3rd change = 2).
033             * This number is not incremented at the release of 9.08.07! It is only incremented, if
034             * the data structure changes in a way that prevents older versions from operating!
035             */
036            @Override
037            public int getCommandVersion() {
038                    if (this.version >= 0)
039                            return this.version;
040    
041                    // BEGIN: maintain this - i.e. manually update the following!!!
042                    // Last updated: 2012-07-20 by Marco
043                    // Current version in pom.xml: 1.1.0-SNAPSHOT
044                    int major   = getCommandVersionMajor();
045                    int minor   = getCommandVersionMinor();
046                    int release = getCommandVersionRelease();
047                    int serial  = getCommandVersionSerial();
048                    // END
049    
050                    // Calculate version number from elements.
051                    int version = (
052                                    major * 100 /*minor*/ * 100 /*release*/ * 1000 /*serial*/ +
053                                                  minor   * 100 /*release*/ * 1000 /*serial*/ +
054                                                                  release   * 1000 /*serial*/ +
055                                                                                     serial
056                    );
057                    logger.info("version={}", version);
058                    this.version = version;
059                    return version;
060            }
061    
062            public int getCommandVersionMajor() {
063                    return  01;
064            }
065    
066            public int getCommandVersionMinor() {
067                    return  01;
068            }
069    
070            public int getCommandVersionRelease() {
071                    return  00;
072            }
073    
074            public int getCommandVersionSerial() {
075                    return 001;
076            }
077    
078            @Override
079            public boolean isFinal() {
080                    return false;
081            }
082    
083            @Override
084            public void apply(CommandApplyParam commandApplyParam) {
085                    // nothing - this command is only used to have a general version and to ensure a minimum database version.
086            }
087    
088            public static void main(String[] args) {
089                    System.out.println(new MinimumCumulus4jVersion().getCommandVersion());
090            }
091    
092    }