/*
* Copyright (c) 2008 Los Alamos National Security, LLC.
*
* Los Alamos National Laboratory
* Research Library
* Digital Library Research & Prototyping Team
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
package gov.lanl.adore.djatoka;
import java.util.Properties;
/**
* Encode Parameters for djatoka compression. Defines compression
* parameters (i.e. levels, slope, layers, etc.) to be performed
* during extraction of JP2.
* @author Ryan Chute
*
*/
public class DjatokaEncodeParam implements DjatokaConstants {
private String rate;
private String slope;
private int layers = DEFAULT_CLAYERS;
private int levels = DEFAULT_CLEVELS;
private boolean useReversible = DEFAULT_USE_REVERSIBLE;
private String precincts = DEFAULT_CPRECINCTS;
private String progressionOrder = DEFAULT_CORDER;
private boolean insertPLT = DEFAULT_ORGGEN_PLT;
private String packetDivision = DEFAULT_ORGTPARTS;
private String codeBlockSize = DEFAULT_CBLK;
/**
* Default Constructor, uses default slope and compression settings
*/
public DjatokaEncodeParam() {
setSlope(DEFAULT_SLOPE);
}
/**
* Constructor using provided properties to initialize encode parameters
* @param props Properties to initialize encode parameters
*/
public DjatokaEncodeParam(Properties props) {
if (props != null) {
if (props.containsKey("rate")) {
rate = props.getProperty("rate");
} else {
slope = props.getProperty("slope", DEFAULT_SLOPE);
}
layers = props.getProperty("Clayers") != null ? Integer.parseInt(props.getProperty("Clayers")) : layers;
levels = props.getProperty("Clevels") != null ? Integer.parseInt(props.getProperty("Clevels")) : levels;
useReversible = props.getProperty("Creversible") != null ? Boolean.parseBoolean(props.getProperty("Creversible")) : useReversible;
precincts = props.getProperty("Cprecincts", precincts);
progressionOrder = props.getProperty("Corder", progressionOrder);
insertPLT = props.getProperty("ORGgen_plt") != null ? Boolean.parseBoolean(props.getProperty("ORGgen_plt")) : insertPLT;
packetDivision = props.getProperty("ORGtparts", packetDivision);
codeBlockSize = props.getProperty("Cblk", codeBlockSize);
}
}
/**
* Returns the absolute compression rate, if enabled.
* @return the absolute compression rate
*/
public String getRate() {
return rate;
}
/**
* Sets the absolute compression rate, setting slope to null.
* @param rate the absolute compression rate
*/
public void setRate(String rate) {
if (rate != null && slope != null)
slope = null;
this.rate = rate;
}
/**
* Returns the slope distortion slope, that applies a compression
* rate based on the content of the image.
* @return the slope distortion slope
*/
public String getSlope() {
return slope;
}
/**
* Sets the slope distortion slope, that applies a compression
* rate based on the content of the image.
* @param slope the slope distortion slope
*/
public void setSlope(String slope) {
if (rate != null && slope != null)
rate = null;
this.slope = slope;
}
/**
* Returns the number of quality layers, must correspond with
* number of slope values.
* @return the number of quality layers
*/
public int getLayers() {
return layers;
}
/**
* Sets the number of quality layers, must correspond with
* number of slope values.
* @param layers the number of quality layers
*/
public void setLayers(int layers) {
this.layers = layers;
}
/**
* Returns the number of DWT Levels (i.e. resolution levels)
* @return the number of DWT Levels
*/
public int getLevels() {
return levels;
}
/**
* Sets the number of DWT Levels (i.e. resolution levels)
* @param levels the number of DWT Levels
*/
public void setLevels(int levels) {
this.levels = levels;
}
/**
* Returns indicator of whether or not a reversible compression
* wavelet should be used.
* @return use reversible wavelet
*/
public boolean getUseReversible() {
return useReversible;
}
/**
* Sets indicator of whether or not a reversible compression
* wavelet should be used.
* @param useReversible use reversible wavelet
*/
public void setUseReversible(boolean useReversible) {
this.useReversible = useReversible;
}
/**
* Returns the size of the layer packets.
* @return the size of the layer packets
*/
public String getPrecincts() {
return precincts;
}
/**
* Sets the size of the layer packets. Default values improved random
* access performance. Format: "{256,256},{256,256},{128,128}"
* @param precincts the size of the layer packets.
*/
public void setPrecincts(String precincts) {
this.precincts = precincts;
}
/**
* Returns the preferred progression order for layers.
* @return progression order
*/
public String getProgressionOrder() {
return progressionOrder;
}
/**
* Sets the preferred progression order for layers.
* @param pOrder progression order
*/
public void setProgressionOrder(String pOrder) {
this.progressionOrder = pOrder;
}
/**
* Returns indicator of whether or not packet organization header
* info should be included.
* @return include packet info
*/
public boolean getInsertPLT() {
return insertPLT;
}
/**
* Sets indicator of whether or not packet organization header
* info should be included.
* @param insertPLT include packet info
*/
public void setInsertPLT(boolean insertPLT) {
this.insertPLT = insertPLT;
}
/**
* Returns order of header information. Default values improve
* resolution access performance.
* @return packet division order
*/
public String getPacketDivision() {
return packetDivision;
}
/**
* Sets order of header information. Default values improve
* resolution access performance.
* @param packetDivision packet division order
*/
public void setPacketDivision(String packetDivision) {
this.packetDivision = packetDivision;
}
/**
* Returns the codeblock size.
* @return the codeblock size
*/
public String getCodeBlockSize() {
return codeBlockSize;
}
/**
* Sets the codeblock size.
* @param codeBlockSize the codeblock size
*/
public void setCodeBlockSize(String codeBlockSize) {
this.codeBlockSize = codeBlockSize;
}
}