Issue #2221 - Changes to have select configuration files for retention and case creation.
Change-Id: Ia24898f04c3a2a626ea0aeb04c2c302e406afa1f Former-commit-id: 303a5b6dada429257e00b4059c8846a2d97a85de
This commit is contained in:
parent
d44f5b3b8a
commit
cd848ded29
14 changed files with 1436 additions and 136 deletions
|
@ -16,7 +16,16 @@ import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.core.runtime.jobs.Job;
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
|
|
||||||
import com.raytheon.uf.common.archive.config.ArchiveConfigManager;
|
import com.raytheon.uf.common.archive.config.ArchiveConfigManager;
|
||||||
|
import com.raytheon.uf.common.archive.config.ArchiveConstants;
|
||||||
|
import com.raytheon.uf.common.archive.config.ArchiveConstants.Type;
|
||||||
import com.raytheon.uf.common.archive.config.DisplayData;
|
import com.raytheon.uf.common.archive.config.DisplayData;
|
||||||
|
import com.raytheon.uf.common.archive.config.SelectConfig;
|
||||||
|
import com.raytheon.uf.common.archive.config.select.ArchiveSelect;
|
||||||
|
import com.raytheon.uf.common.archive.config.select.CategorySelect;
|
||||||
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
|
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
|
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Job to determine the size for a directory and its contents on a non-UI
|
* Job to determine the size for a directory and its contents on a non-UI
|
||||||
|
@ -37,6 +46,8 @@ import com.raytheon.uf.common.archive.config.DisplayData;
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
public class SizeJob extends Job {
|
public class SizeJob extends Job {
|
||||||
|
private final IUFStatusHandler statusHandler = UFStatus
|
||||||
|
.getHandler(SizeJob.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mapping of display data by archive and category names.
|
* Mapping of display data by archive and category names.
|
||||||
|
@ -222,6 +233,93 @@ public class SizeJob extends Job {
|
||||||
return archiveInfoMap.keySet();
|
return archiveInfoMap.keySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check all displayData selection state so only the data in selections are
|
||||||
|
* set.
|
||||||
|
*
|
||||||
|
* @param selections
|
||||||
|
*/
|
||||||
|
public void loadSelect(String selectName, ArchiveConstants.Type type) {
|
||||||
|
ArchiveConfigManager manager = ArchiveConfigManager.getInstance();
|
||||||
|
String fileName = ArchiveConstants.selectFileName(type, selectName);
|
||||||
|
SelectConfig selections = manager.loadSelection(fileName);
|
||||||
|
if (selections == null) {
|
||||||
|
selections = new SelectConfig();
|
||||||
|
selections.setName(ArchiveConstants.defaultSelectName);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String archiveName : getArchiveNames()) {
|
||||||
|
ArchiveInfo archiveInfo = get(archiveName);
|
||||||
|
for (String categoryName : archiveInfo.getCategoryNames()) {
|
||||||
|
CategoryInfo categoryInfo = archiveInfo.get(categoryName);
|
||||||
|
List<String> selectionsList = selections.getSelectedList(
|
||||||
|
archiveName, categoryName);
|
||||||
|
for (DisplayData displayData : categoryInfo
|
||||||
|
.getDisplayDataList()) {
|
||||||
|
String displayLabel = displayData.getDisplayLabel();
|
||||||
|
boolean selected = selectionsList.contains(displayLabel);
|
||||||
|
if (selected != displayData.isSelected()) {
|
||||||
|
setSelect(archiveName, categoryName, displayLabel,
|
||||||
|
selected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save selections to the desired file.
|
||||||
|
*
|
||||||
|
* @param selectName
|
||||||
|
* @param type
|
||||||
|
* @param startRetentionMS
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String saveSelect(String selectName, ArchiveConstants.Type type,
|
||||||
|
long startRetentionMS) {
|
||||||
|
String errorMsg = null;
|
||||||
|
SelectConfig selections = new SelectConfig();
|
||||||
|
selections.setName(selectName);
|
||||||
|
if (type == Type.Case) {
|
||||||
|
long startRetentionHours = startRetentionMS
|
||||||
|
/ TimeUtil.MILLIS_PER_HOUR;
|
||||||
|
selections.setStarRetentionHours(startRetentionHours);
|
||||||
|
}
|
||||||
|
for (String archiveName : getArchiveNames()) {
|
||||||
|
ArchiveInfo archiveInfo = get(archiveName);
|
||||||
|
ArchiveSelect archiveSelect = new ArchiveSelect();
|
||||||
|
archiveSelect.setName(archiveName);
|
||||||
|
for (String categoryName : archiveInfo.getCategoryNames()) {
|
||||||
|
CategoryInfo categoryInfo = archiveInfo.get(categoryName);
|
||||||
|
CategorySelect categorySelect = new CategorySelect();
|
||||||
|
categorySelect.setName(categoryName);
|
||||||
|
for (DisplayData displayData : categoryInfo
|
||||||
|
.getDisplayDataList()) {
|
||||||
|
if (displayData.isSelected()) {
|
||||||
|
categorySelect.add(displayData.getDisplayLabel());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!categorySelect.isEmpty()) {
|
||||||
|
archiveSelect.add(categorySelect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!archiveSelect.isEmpty()) {
|
||||||
|
selections.add(archiveSelect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String fileName = ArchiveConstants.selectFileName(type, selectName);
|
||||||
|
|
||||||
|
try {
|
||||||
|
ArchiveConfigManager.getInstance().saveSelections(selections,
|
||||||
|
fileName);
|
||||||
|
} catch (Exception e) {
|
||||||
|
errorMsg = "Unable to save file: " + fileName;
|
||||||
|
statusHandler.handle(Priority.ERROR, errorMsg, e);
|
||||||
|
}
|
||||||
|
return errorMsg;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Change the selection state and requeue size request.
|
* Change the selection state and requeue size request.
|
||||||
*
|
*
|
||||||
|
|
|
@ -28,27 +28,34 @@ import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.core.runtime.jobs.Job;
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
|
import org.eclipse.jface.dialogs.MessageDialog;
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
import org.eclipse.swt.events.SelectionAdapter;
|
import org.eclipse.swt.events.SelectionAdapter;
|
||||||
import org.eclipse.swt.events.SelectionEvent;
|
import org.eclipse.swt.events.SelectionEvent;
|
||||||
|
import org.eclipse.swt.events.ShellAdapter;
|
||||||
|
import org.eclipse.swt.events.ShellEvent;
|
||||||
import org.eclipse.swt.layout.GridData;
|
import org.eclipse.swt.layout.GridData;
|
||||||
import org.eclipse.swt.layout.GridLayout;
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
|
import org.eclipse.swt.widgets.Button;
|
||||||
import org.eclipse.swt.widgets.Combo;
|
import org.eclipse.swt.widgets.Combo;
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
import org.eclipse.swt.widgets.Label;
|
import org.eclipse.swt.widgets.Label;
|
||||||
|
import org.eclipse.swt.widgets.MessageBox;
|
||||||
import org.eclipse.swt.widgets.Shell;
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
|
||||||
import com.raytheon.uf.common.archive.config.ArchiveConfig;
|
import com.raytheon.uf.common.archive.config.ArchiveConfig;
|
||||||
import com.raytheon.uf.common.archive.config.ArchiveConfigManager;
|
import com.raytheon.uf.common.archive.config.ArchiveConfigManager;
|
||||||
|
import com.raytheon.uf.common.archive.config.ArchiveConstants;
|
||||||
import com.raytheon.uf.common.archive.config.CategoryConfig;
|
import com.raytheon.uf.common.archive.config.CategoryConfig;
|
||||||
import com.raytheon.uf.common.archive.config.DisplayData;
|
import com.raytheon.uf.common.archive.config.DisplayData;
|
||||||
|
import com.raytheon.uf.common.archive.config.SelectConfig;
|
||||||
|
import com.raytheon.uf.common.localization.exception.LocalizationOpFailedException;
|
||||||
import com.raytheon.uf.common.util.SizeUtil;
|
import com.raytheon.uf.common.util.SizeUtil;
|
||||||
import com.raytheon.uf.viz.archive.data.ArchiveInfo;
|
import com.raytheon.uf.viz.archive.data.ArchiveInfo;
|
||||||
import com.raytheon.uf.viz.archive.data.CategoryInfo;
|
import com.raytheon.uf.viz.archive.data.CategoryInfo;
|
||||||
import com.raytheon.uf.viz.archive.data.IArchiveTotals;
|
import com.raytheon.uf.viz.archive.data.IArchiveTotals;
|
||||||
import com.raytheon.uf.viz.archive.data.IUpdateListener;
|
import com.raytheon.uf.viz.archive.data.IUpdateListener;
|
||||||
import com.raytheon.uf.viz.archive.data.SizeJob;
|
import com.raytheon.uf.viz.archive.data.SizeJob;
|
||||||
import com.raytheon.uf.viz.archive.ui.ArchiveTableComp.TableType;
|
|
||||||
import com.raytheon.uf.viz.core.VizApp;
|
import com.raytheon.uf.viz.core.VizApp;
|
||||||
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
||||||
|
|
||||||
|
@ -66,6 +73,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
||||||
* May 30, 2013 1965 bgonzale Initial creation
|
* May 30, 2013 1965 bgonzale Initial creation
|
||||||
* Jun 10, 2013 1966 rferrel Change to allow Case Creation to extend.
|
* Jun 10, 2013 1966 rferrel Change to allow Case Creation to extend.
|
||||||
* Jul 24, 2013 2220 rferrel Changes to queue size request for all data.
|
* Jul 24, 2013 2220 rferrel Changes to queue size request for all data.
|
||||||
|
* Aug 01, 2013 2221 rferrel Changes for select configuration.
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author bgonzale
|
* @author bgonzale
|
||||||
|
@ -73,7 +81,7 @@ import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
||||||
IArchiveTotals, IUpdateListener {
|
IArchiveTotals, IUpdateListener, IModifyListener {
|
||||||
|
|
||||||
/** Table composite that holds the table controls. */
|
/** Table composite that holds the table controls. */
|
||||||
private ArchiveTableComp tableComp;
|
private ArchiveTableComp tableComp;
|
||||||
|
@ -84,16 +92,13 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
||||||
/** Category combo box. */
|
/** Category combo box. */
|
||||||
private Combo categoryCbo;
|
private Combo categoryCbo;
|
||||||
|
|
||||||
/**
|
/** Data manager. */
|
||||||
* Boolean to indicate when DisplayData is created should its selection be
|
protected ArchiveConfigManager manager = ArchiveConfigManager.getInstance();
|
||||||
* set based on the information in the configuration files.
|
|
||||||
*/
|
|
||||||
protected boolean setSelect = false;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Must be set by sub-class prior to creating table.
|
* Must be set by sub-class prior to creating any components.
|
||||||
*/
|
*/
|
||||||
protected TableType tableType;
|
protected ArchiveConstants.Type type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Job that computes sizes of table row entries off the UI thread.
|
* Job that computes sizes of table row entries off the UI thread.
|
||||||
|
@ -103,6 +108,15 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
||||||
/** Keeps track of when it is safe to clear the busy cursor. */
|
/** Keeps track of when it is safe to clear the busy cursor. */
|
||||||
protected final AtomicInteger busyCnt = new AtomicInteger(0);
|
protected final AtomicInteger busyCnt = new AtomicInteger(0);
|
||||||
|
|
||||||
|
/** Performs save action button. */
|
||||||
|
protected Button saveBtn;
|
||||||
|
|
||||||
|
/** Flag set when user wants to close with unsaved modifications. */
|
||||||
|
protected boolean closeFlag = false;
|
||||||
|
|
||||||
|
/** Current select (case/retention) loaded into the dialog. */
|
||||||
|
protected String selectName = ArchiveConstants.defaultSelectName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param parentShell
|
* @param parentShell
|
||||||
*/
|
*/
|
||||||
|
@ -197,6 +211,11 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
||||||
*/
|
*/
|
||||||
protected abstract void setTotalSizeText(String sizeStringText);
|
protected abstract void setTotalSizeText(String sizeStringText);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called by the AbstractArchiveDlg to set total Size.
|
||||||
|
*
|
||||||
|
* @param totalSize
|
||||||
|
*/
|
||||||
protected abstract void setTotalSelectedItems(int totalSize);
|
protected abstract void setTotalSelectedItems(int totalSize);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -294,12 +313,13 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
initDisplayData();
|
final String titleName = initDisplayData(null);
|
||||||
if (!shell.isDisposed()) {
|
if (!shell.isDisposed()) {
|
||||||
VizApp.runAsync(new Runnable() {
|
VizApp.runAsync(new Runnable() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
setSelectName(titleName);
|
||||||
updateTableComp();
|
updateTableComp();
|
||||||
setCursorBusy(false);
|
setCursorBusy(false);
|
||||||
}
|
}
|
||||||
|
@ -308,14 +328,51 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
||||||
return Status.OK_STATUS;
|
return Status.OK_STATUS;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
job.schedule();
|
job.schedule();
|
||||||
|
addModifiedListener(this);
|
||||||
|
shell.addShellListener(new ShellAdapter() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void shellClosed(ShellEvent e) {
|
||||||
|
if (closeFlag || !isModified()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
e.doit = false;
|
||||||
|
VizApp.runAsync(new Runnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (verifyClose()) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change the select name and update the dialog's title. Assumes the
|
||||||
|
* sub-classes places a hyphen at the end of the string when setting the
|
||||||
|
* dialog's title.
|
||||||
|
*
|
||||||
|
* @param selectName
|
||||||
|
*/
|
||||||
|
protected void setSelectName(String selectName) {
|
||||||
|
this.selectName = selectName;
|
||||||
|
StringBuilder sb = new StringBuilder(getText());
|
||||||
|
sb.setLength(sb.indexOf("-") + 1);
|
||||||
|
sb.append(" ").append(selectName);
|
||||||
|
setText(sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create the table control.
|
* Create the table control.
|
||||||
*/
|
*/
|
||||||
protected void createTable() {
|
protected void createTable() {
|
||||||
tableComp = new ArchiveTableComp(shell, tableType, this, sizeJob);
|
tableComp = new ArchiveTableComp(shell, type, this, sizeJob);
|
||||||
sizeJob.addUpdateListener(this);
|
sizeJob.addUpdateListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,7 +398,6 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
||||||
* Initial population up of the combo boxes.
|
* Initial population up of the combo boxes.
|
||||||
*/
|
*/
|
||||||
private void populateComboBoxes() {
|
private void populateComboBoxes() {
|
||||||
ArchiveConfigManager manager = ArchiveConfigManager.getInstance();
|
|
||||||
boolean doSelect = false;
|
boolean doSelect = false;
|
||||||
for (String archiveName : manager.getArchiveDataNamesList()) {
|
for (String archiveName : manager.getArchiveDataNamesList()) {
|
||||||
archCfgCbo.add(archiveName);
|
archCfgCbo.add(archiveName);
|
||||||
|
@ -374,12 +430,12 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
||||||
|
|
||||||
private void initCategoryCbo() {
|
private void initCategoryCbo() {
|
||||||
String archiveName = getSelectedArchiveName();
|
String archiveName = getSelectedArchiveName();
|
||||||
ArchiveConfigManager manager = ArchiveConfigManager.getInstance();
|
|
||||||
categoryCbo.removeAll();
|
categoryCbo.removeAll();
|
||||||
for (String categoryName : manager.getCategoryNames(archiveName)) {
|
for (String categoryName : manager.getCategoryNames(archiveName)) {
|
||||||
categoryCbo.add(categoryName);
|
categoryCbo.add(categoryName);
|
||||||
}
|
}
|
||||||
categoryCbo.select(0);
|
categoryCbo.select(0);
|
||||||
|
categoryComboSelection();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -393,8 +449,14 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
||||||
* Set up all display data and queue getting sizes for any that are
|
* Set up all display data and queue getting sizes for any that are
|
||||||
* selected.
|
* selected.
|
||||||
*/
|
*/
|
||||||
private void initDisplayData() {
|
protected String initDisplayData(String selectName) {
|
||||||
ArchiveConfigManager manager = ArchiveConfigManager.getInstance();
|
String fileName = ArchiveConstants.selectFileName(type, selectName);
|
||||||
|
SelectConfig selections = manager.loadSelection(fileName);
|
||||||
|
if (selections == null) {
|
||||||
|
selections = new SelectConfig();
|
||||||
|
selections.setName(ArchiveConstants.defaultSelectName);
|
||||||
|
}
|
||||||
|
setRetentionTimes(selections.getStarRetentionHours());
|
||||||
String[] archiveNames = manager.getArchiveDataNamesList();
|
String[] archiveNames = manager.getArchiveDataNamesList();
|
||||||
for (String archiveName : archiveNames) {
|
for (String archiveName : archiveNames) {
|
||||||
ArchiveInfo archiveInfo = new ArchiveInfo();
|
ArchiveInfo archiveInfo = new ArchiveInfo();
|
||||||
|
@ -405,15 +467,46 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
||||||
// move getting displayDatas into SizeJob then get current
|
// move getting displayDatas into SizeJob then get current
|
||||||
// display, displays with selections then other displays in the
|
// display, displays with selections then other displays in the
|
||||||
// background.
|
// background.
|
||||||
|
List<String> selectedList = selections.getSelectedList(
|
||||||
|
archiveName, categoryName);
|
||||||
List<DisplayData> displayDatas = manager.getDisplayData(
|
List<DisplayData> displayDatas = manager.getDisplayData(
|
||||||
archiveName, categoryName, setSelect);
|
archiveName, categoryName, false);
|
||||||
CategoryInfo categoryInfo = new CategoryInfo(archiveName,
|
CategoryInfo categoryInfo = new CategoryInfo(archiveName,
|
||||||
categoryName, displayDatas);
|
categoryName, displayDatas);
|
||||||
archiveInfo.add(categoryInfo);
|
archiveInfo.add(categoryInfo);
|
||||||
|
for (DisplayData displayData : displayDatas) {
|
||||||
|
displayData.setSelected(selectedList.contains(displayData
|
||||||
|
.getDisplayLabel()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sizeJob.put(archiveName, archiveInfo);
|
sizeJob.put(archiveName, archiveInfo);
|
||||||
}
|
}
|
||||||
sizeJob.resetTime(getStart(), getEnd());
|
sizeJob.resetTime(getStart(), getEnd());
|
||||||
|
return selections.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a select configuration file.
|
||||||
|
*
|
||||||
|
* @param selectName
|
||||||
|
*/
|
||||||
|
protected void deleteSelect(String selectName) {
|
||||||
|
String fileName = ArchiveConstants.selectFileName(type, selectName);
|
||||||
|
try {
|
||||||
|
manager.deleteSelection(fileName);
|
||||||
|
} catch (LocalizationOpFailedException e) {
|
||||||
|
MessageDialog.openError(shell, "Case Error",
|
||||||
|
"Unable to delete file: " + fileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load a select configuration file.
|
||||||
|
*
|
||||||
|
* @param selectName
|
||||||
|
*/
|
||||||
|
protected void loadSelect(String selectName) {
|
||||||
|
sizeJob.loadSelect(selectName, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -529,6 +622,7 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VizApp.runAsync(new Runnable() {
|
VizApp.runAsync(new Runnable() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -594,4 +688,63 @@ public abstract class AbstractArchiveDlg extends CaveSWTDialog implements
|
||||||
sizeJob.recomputeSize();
|
sizeJob.recomputeSize();
|
||||||
populateTableComp();
|
populateTableComp();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows a sub-class to set the start and end times based on the off set.
|
||||||
|
*
|
||||||
|
* @param startTimeOffset
|
||||||
|
*/
|
||||||
|
protected void setRetentionTimes(long startTimeOffset) {
|
||||||
|
// do nothing override by sub-classes
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicate unsaved user changes.
|
||||||
|
*
|
||||||
|
* @return modified
|
||||||
|
*/
|
||||||
|
protected boolean isModified() {
|
||||||
|
return (saveBtn != null) && !saveBtn.isDisposed()
|
||||||
|
&& saveBtn.isEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save current selections of the select configuration file.
|
||||||
|
*
|
||||||
|
* @param selectName
|
||||||
|
* @return true when save is successful
|
||||||
|
*/
|
||||||
|
protected boolean saveSelection(String selectName) {
|
||||||
|
Calendar start = getStart();
|
||||||
|
Calendar end = getEnd();
|
||||||
|
long startRetentionMS = 0L;
|
||||||
|
if (start != null && end != null) {
|
||||||
|
startRetentionMS = end.getTimeInMillis() - start.getTimeInMillis();
|
||||||
|
}
|
||||||
|
String errorMsg = sizeJob
|
||||||
|
.saveSelect(selectName, type, startRetentionMS);
|
||||||
|
if (errorMsg != null) {
|
||||||
|
MessageDialog.openError(shell, type + " Selection Error", errorMsg);
|
||||||
|
}
|
||||||
|
|
||||||
|
return errorMsg == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When unsaved modifications this asks the user to verify the close.
|
||||||
|
*
|
||||||
|
* @return true when okay to close.
|
||||||
|
*/
|
||||||
|
protected boolean verifyClose() {
|
||||||
|
boolean state = true;
|
||||||
|
if (isModified()) {
|
||||||
|
MessageBox box = new MessageBox(shell, SWT.ICON_WARNING | SWT.OK
|
||||||
|
| SWT.CANCEL);
|
||||||
|
box.setText("Close " + type);
|
||||||
|
box.setMessage("Unsave changes.\nSelect OK to discard changes.");
|
||||||
|
state = box.open() == SWT.OK;
|
||||||
|
}
|
||||||
|
closeFlag = state;
|
||||||
|
return state;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,6 @@ import java.util.List;
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
import org.eclipse.swt.events.SelectionAdapter;
|
import org.eclipse.swt.events.SelectionAdapter;
|
||||||
import org.eclipse.swt.events.SelectionEvent;
|
import org.eclipse.swt.events.SelectionEvent;
|
||||||
import org.eclipse.swt.events.ShellAdapter;
|
|
||||||
import org.eclipse.swt.events.ShellEvent;
|
|
||||||
import org.eclipse.swt.layout.GridData;
|
import org.eclipse.swt.layout.GridData;
|
||||||
import org.eclipse.swt.layout.GridLayout;
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
import org.eclipse.swt.widgets.Button;
|
import org.eclipse.swt.widgets.Button;
|
||||||
|
@ -34,15 +32,11 @@ import org.eclipse.swt.widgets.Combo;
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
import org.eclipse.swt.widgets.Label;
|
import org.eclipse.swt.widgets.Label;
|
||||||
import org.eclipse.swt.widgets.Layout;
|
import org.eclipse.swt.widgets.Layout;
|
||||||
import org.eclipse.swt.widgets.MessageBox;
|
|
||||||
import org.eclipse.swt.widgets.Shell;
|
import org.eclipse.swt.widgets.Shell;
|
||||||
import org.eclipse.swt.widgets.Spinner;
|
import org.eclipse.swt.widgets.Spinner;
|
||||||
|
|
||||||
import com.raytheon.uf.common.archive.config.ArchiveConfigManager;
|
import com.raytheon.uf.common.archive.config.ArchiveConstants.Type;
|
||||||
import com.raytheon.uf.common.archive.config.DisplayData;
|
import com.raytheon.uf.common.archive.config.DisplayData;
|
||||||
import com.raytheon.uf.viz.archive.data.IArchiveTotals;
|
|
||||||
import com.raytheon.uf.viz.archive.ui.ArchiveTableComp.TableType;
|
|
||||||
import com.raytheon.uf.viz.core.VizApp;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Archive retention dialog.
|
* Archive retention dialog.
|
||||||
|
@ -57,14 +51,14 @@ import com.raytheon.uf.viz.core.VizApp;
|
||||||
* May 31, 2013 #1965 bgonzale Initial work for updating retention configurations.
|
* May 31, 2013 #1965 bgonzale Initial work for updating retention configurations.
|
||||||
* Jun 10, 2013 #1966 rferrel Implemented hooks to get display and save to work.
|
* Jun 10, 2013 #1966 rferrel Implemented hooks to get display and save to work.
|
||||||
* Jul 24, 2013 #2220 rferrel Add recompute size button.
|
* Jul 24, 2013 #2220 rferrel Add recompute size button.
|
||||||
|
* Jul 24, 2013 #2221 rferrel Changes for select configuration.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author lvenable
|
* @author lvenable
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
public class ArchiveRetentionDlg extends AbstractArchiveDlg implements
|
public class ArchiveRetentionDlg extends AbstractArchiveDlg {
|
||||||
IArchiveTotals, IModifyListener {
|
|
||||||
|
|
||||||
/** Current Archive/Category selection's minimum retention hours. */
|
/** Current Archive/Category selection's minimum retention hours. */
|
||||||
private RetentionHours minRetention;
|
private RetentionHours minRetention;
|
||||||
|
@ -78,12 +72,6 @@ public class ArchiveRetentionDlg extends AbstractArchiveDlg implements
|
||||||
/** Displays the total size of selected items. */
|
/** Displays the total size of selected items. */
|
||||||
private Label totalSizeLbl;
|
private Label totalSizeLbl;
|
||||||
|
|
||||||
/** Performs save action button. */
|
|
||||||
private Button saveBtn;
|
|
||||||
|
|
||||||
/** Flag set when user wants to close with unsaved modifications. */
|
|
||||||
boolean closeFlag = false;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
|
@ -93,8 +81,7 @@ public class ArchiveRetentionDlg extends AbstractArchiveDlg implements
|
||||||
public ArchiveRetentionDlg(Shell parentShell) {
|
public ArchiveRetentionDlg(Shell parentShell) {
|
||||||
super(parentShell, SWT.DIALOG_TRIM | SWT.MIN, CAVE.DO_NOT_BLOCK
|
super(parentShell, SWT.DIALOG_TRIM | SWT.MIN, CAVE.DO_NOT_BLOCK
|
||||||
| CAVE.MODE_INDEPENDENT | CAVE.INDEPENDENT_SHELL);
|
| CAVE.MODE_INDEPENDENT | CAVE.INDEPENDENT_SHELL);
|
||||||
this.setSelect = true;
|
this.type = Type.Retention;
|
||||||
this.tableType = TableType.Retention;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -121,7 +108,7 @@ public class ArchiveRetentionDlg extends AbstractArchiveDlg implements
|
||||||
@Override
|
@Override
|
||||||
protected void initializeComponents(Shell shell) {
|
protected void initializeComponents(Shell shell) {
|
||||||
super.initializeComponents(shell);
|
super.initializeComponents(shell);
|
||||||
setText("Archive Retention");
|
setText("Archive Retention -");
|
||||||
Composite mainComp = new Composite(shell, SWT.NONE);
|
Composite mainComp = new Composite(shell, SWT.NONE);
|
||||||
GridLayout gl = new GridLayout(1, false);
|
GridLayout gl = new GridLayout(1, false);
|
||||||
gl.marginHeight = 0;
|
gl.marginHeight = 0;
|
||||||
|
@ -236,9 +223,7 @@ public class ArchiveRetentionDlg extends AbstractArchiveDlg implements
|
||||||
saveBtn.addSelectionListener(new SelectionAdapter() {
|
saveBtn.addSelectionListener(new SelectionAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void widgetSelected(SelectionEvent selectionEvent) {
|
public void widgetSelected(SelectionEvent selectionEvent) {
|
||||||
ArchiveConfigManager manager = ArchiveConfigManager
|
saveSelection(selectName);
|
||||||
.getInstance();
|
|
||||||
manager.save();
|
|
||||||
saveBtn.setEnabled(false);
|
saveBtn.setEnabled(false);
|
||||||
clearModified();
|
clearModified();
|
||||||
}
|
}
|
||||||
|
@ -271,24 +256,6 @@ public class ArchiveRetentionDlg extends AbstractArchiveDlg implements
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* When unsaved modifications this asks the user to verify the close.
|
|
||||||
*
|
|
||||||
* @return true when okay to close.
|
|
||||||
*/
|
|
||||||
private boolean verifyClose() {
|
|
||||||
boolean state = true;
|
|
||||||
if (isModified()) {
|
|
||||||
MessageBox box = new MessageBox(shell, SWT.ICON_WARNING | SWT.OK
|
|
||||||
| SWT.CANCEL);
|
|
||||||
box.setText("Close Retention");
|
|
||||||
box.setMessage("Unsave changes.\nSelect OK to continue.");
|
|
||||||
state = box.open() == SWT.OK;
|
|
||||||
}
|
|
||||||
closeFlag = state;
|
|
||||||
return state;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
@ -403,37 +370,6 @@ public class ArchiveRetentionDlg extends AbstractArchiveDlg implements
|
||||||
extRetention.clearModified();
|
extRetention.clearModified();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* (non-Javadoc)
|
|
||||||
*
|
|
||||||
* @see com.raytheon.uf.viz.archive.ui.AbstractArchiveDlg#preOpened()
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
protected void preOpened() {
|
|
||||||
super.preOpened();
|
|
||||||
addModifiedListener(this);
|
|
||||||
shell.addShellListener(new ShellAdapter() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void shellClosed(ShellEvent e) {
|
|
||||||
if (closeFlag || !isModified()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
e.doit = false;
|
|
||||||
VizApp.runAsync(new Runnable() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if (verifyClose()) {
|
|
||||||
close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
@ -446,14 +382,4 @@ public class ArchiveRetentionDlg extends AbstractArchiveDlg implements
|
||||||
removeModifiedListener(this);
|
removeModifiedListener(this);
|
||||||
super.disposed();
|
super.disposed();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicate unsaved user changes.
|
|
||||||
*
|
|
||||||
* @return modified
|
|
||||||
*/
|
|
||||||
private boolean isModified() {
|
|
||||||
return (saveBtn != null) && !saveBtn.isDisposed()
|
|
||||||
&& saveBtn.isEnabled();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,6 +42,8 @@ import org.eclipse.swt.widgets.Table;
|
||||||
import org.eclipse.swt.widgets.TableColumn;
|
import org.eclipse.swt.widgets.TableColumn;
|
||||||
import org.eclipse.swt.widgets.TableItem;
|
import org.eclipse.swt.widgets.TableItem;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.archive.config.ArchiveConstants;
|
||||||
|
import com.raytheon.uf.common.archive.config.ArchiveConstants.Type;
|
||||||
import com.raytheon.uf.common.archive.config.DisplayData;
|
import com.raytheon.uf.common.archive.config.DisplayData;
|
||||||
import com.raytheon.uf.common.util.SizeUtil;
|
import com.raytheon.uf.common.util.SizeUtil;
|
||||||
import com.raytheon.uf.viz.archive.data.IArchiveTotals;
|
import com.raytheon.uf.viz.archive.data.IArchiveTotals;
|
||||||
|
@ -57,6 +59,7 @@ import com.raytheon.uf.viz.archive.data.SizeJob;
|
||||||
* Date Ticket# Engineer Description
|
* Date Ticket# Engineer Description
|
||||||
* ------------ ---------- ----------- --------------------------
|
* ------------ ---------- ----------- --------------------------
|
||||||
* May 23, 2013 #1964 lvenable Initial creation
|
* May 23, 2013 #1964 lvenable Initial creation
|
||||||
|
* Jul 24, 2013 #2221 rferrel Changes for select configuration.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -89,13 +92,8 @@ public class ArchiveTableComp extends Composite {
|
||||||
/** Size label. */
|
/** Size label. */
|
||||||
private Label sizeLbl;
|
private Label sizeLbl;
|
||||||
|
|
||||||
/** Table type enumeration. */
|
/** The dialog's type. */
|
||||||
public enum TableType {
|
private final ArchiveConstants.Type type;
|
||||||
Retention, Case
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Current table type. */
|
|
||||||
private final TableType type;
|
|
||||||
|
|
||||||
/** Allows the parent dialog log to update other total displays. */
|
/** Allows the parent dialog log to update other total displays. */
|
||||||
private final IArchiveTotals iArchiveTotals;
|
private final IArchiveTotals iArchiveTotals;
|
||||||
|
@ -126,7 +124,7 @@ public class ArchiveTableComp extends Composite {
|
||||||
* @param type
|
* @param type
|
||||||
* Table type.
|
* Table type.
|
||||||
*/
|
*/
|
||||||
public ArchiveTableComp(Composite parent, TableType type,
|
public ArchiveTableComp(Composite parent, Type type,
|
||||||
IArchiveTotals iTotalSelectedSize, SizeJob sizeJob) {
|
IArchiveTotals iTotalSelectedSize, SizeJob sizeJob) {
|
||||||
super(parent, 0);
|
super(parent, 0);
|
||||||
|
|
||||||
|
@ -150,7 +148,7 @@ public class ArchiveTableComp extends Composite {
|
||||||
|
|
||||||
createTable();
|
createTable();
|
||||||
|
|
||||||
if (type != TableType.Retention) {
|
if (type != Type.Retention) {
|
||||||
createTableLabels();
|
createTableLabels();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -186,9 +184,9 @@ public class ArchiveTableComp extends Composite {
|
||||||
pathColumn.setText("Label");
|
pathColumn.setText("Label");
|
||||||
|
|
||||||
TableColumn sizeColumn = new TableColumn(table, SWT.CENTER);
|
TableColumn sizeColumn = new TableColumn(table, SWT.CENTER);
|
||||||
if (type == TableType.Retention) {
|
if (type == Type.Retention) {
|
||||||
sizeColumn.setText("Current Size");
|
sizeColumn.setText("Current Size");
|
||||||
} else if (type == TableType.Case) {
|
} else if (type == Type.Case) {
|
||||||
sizeColumn.setText("Size");
|
sizeColumn.setText("Size");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -460,6 +458,7 @@ public class ArchiveTableComp extends Composite {
|
||||||
table.setSortColumn(table.getColumn(LABEL_COL_INDEX));
|
table.setSortColumn(table.getColumn(LABEL_COL_INDEX));
|
||||||
table.setSortDirection(SWT.UP);
|
table.setSortDirection(SWT.UP);
|
||||||
table.clearAll();
|
table.clearAll();
|
||||||
|
updateSelectionLabels();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -47,12 +47,10 @@ import org.eclipse.swt.widgets.MessageBox;
|
||||||
import org.eclipse.swt.widgets.Shell;
|
import org.eclipse.swt.widgets.Shell;
|
||||||
import org.eclipse.swt.widgets.Spinner;
|
import org.eclipse.swt.widgets.Spinner;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.archive.config.ArchiveConstants.Type;
|
||||||
import com.raytheon.uf.common.archive.config.DisplayData;
|
import com.raytheon.uf.common.archive.config.DisplayData;
|
||||||
import com.raytheon.uf.common.time.util.TimeUtil;
|
import com.raytheon.uf.common.time.util.TimeUtil;
|
||||||
import com.raytheon.uf.common.util.SizeUtil;
|
import com.raytheon.uf.common.util.SizeUtil;
|
||||||
import com.raytheon.uf.viz.archive.data.IArchiveTotals;
|
|
||||||
import com.raytheon.uf.viz.archive.data.IUpdateListener;
|
|
||||||
import com.raytheon.uf.viz.archive.ui.ArchiveTableComp.TableType;
|
|
||||||
import com.raytheon.uf.viz.core.VizApp;
|
import com.raytheon.uf.viz.core.VizApp;
|
||||||
import com.raytheon.viz.ui.dialogs.AwipsCalendar;
|
import com.raytheon.viz.ui.dialogs.AwipsCalendar;
|
||||||
import com.raytheon.viz.ui.dialogs.ICloseCallback;
|
import com.raytheon.viz.ui.dialogs.ICloseCallback;
|
||||||
|
@ -71,14 +69,14 @@ import com.raytheon.viz.ui.dialogs.ICloseCallback;
|
||||||
* Jun 10, 2013 #1966 rferrel Implemented back in hooks for display
|
* Jun 10, 2013 #1966 rferrel Implemented back in hooks for display
|
||||||
* and generation of cases.
|
* and generation of cases.
|
||||||
* Jul 24, 2013 #2220 rferrel Add recompute size button.
|
* Jul 24, 2013 #2220 rferrel Add recompute size button.
|
||||||
|
* Jul 24, 2013 #2221 rferrel Changes for select configuration.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
* @author lvenable
|
* @author lvenable
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
public class CaseCreationDlg extends AbstractArchiveDlg implements
|
public class CaseCreationDlg extends AbstractArchiveDlg {
|
||||||
IArchiveTotals, IUpdateListener {
|
|
||||||
|
|
||||||
/** Start time label. */
|
/** Start time label. */
|
||||||
private Label startTimeLbl;
|
private Label startTimeLbl;
|
||||||
|
@ -104,6 +102,15 @@ public class CaseCreationDlg extends AbstractArchiveDlg implements
|
||||||
/** Break files check box. */
|
/** Break files check box. */
|
||||||
private Button breakFilesChk;
|
private Button breakFilesChk;
|
||||||
|
|
||||||
|
/** Button to save new select case configuration. */
|
||||||
|
private Button saveAsBtn;
|
||||||
|
|
||||||
|
/** Button to load select case configuration. */
|
||||||
|
private Button loadBtn;
|
||||||
|
|
||||||
|
/** Button to delete select case configuration. */
|
||||||
|
private Button deleteBtn;
|
||||||
|
|
||||||
/** File size spinner control. */
|
/** File size spinner control. */
|
||||||
private Spinner fileSizeSpnr;
|
private Spinner fileSizeSpnr;
|
||||||
|
|
||||||
|
@ -135,6 +142,15 @@ public class CaseCreationDlg extends AbstractArchiveDlg implements
|
||||||
/** Number of selected items. */
|
/** Number of selected items. */
|
||||||
private int selectedItemsSize = 0;
|
private int selectedItemsSize = 0;
|
||||||
|
|
||||||
|
/** Dialog to create new select case. */
|
||||||
|
private CaseLoadSaveDeleteDlg saveAsDlg;
|
||||||
|
|
||||||
|
/** Dialog to load a select case. */
|
||||||
|
private CaseLoadSaveDeleteDlg loadDlg;
|
||||||
|
|
||||||
|
/** Dialog to delete a select case. */
|
||||||
|
private CaseLoadSaveDeleteDlg deleteDlg;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor.
|
* Constructor.
|
||||||
*
|
*
|
||||||
|
@ -144,8 +160,7 @@ public class CaseCreationDlg extends AbstractArchiveDlg implements
|
||||||
public CaseCreationDlg(Shell parentShell) {
|
public CaseCreationDlg(Shell parentShell) {
|
||||||
super(parentShell, SWT.DIALOG_TRIM | SWT.MIN, CAVE.DO_NOT_BLOCK
|
super(parentShell, SWT.DIALOG_TRIM | SWT.MIN, CAVE.DO_NOT_BLOCK
|
||||||
| CAVE.MODE_INDEPENDENT | CAVE.INDEPENDENT_SHELL);
|
| CAVE.MODE_INDEPENDENT | CAVE.INDEPENDENT_SHELL);
|
||||||
this.setSelect = false;
|
this.type = Type.Case;
|
||||||
this.tableType = TableType.Case;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -173,7 +188,7 @@ public class CaseCreationDlg extends AbstractArchiveDlg implements
|
||||||
@Override
|
@Override
|
||||||
protected void initializeComponents(Shell shell) {
|
protected void initializeComponents(Shell shell) {
|
||||||
super.initializeComponents(shell);
|
super.initializeComponents(shell);
|
||||||
setText("Archive Case Creation");
|
setText("Archive Case Creation -");
|
||||||
Composite mainComp = new Composite(shell, SWT.NONE);
|
Composite mainComp = new Composite(shell, SWT.NONE);
|
||||||
GridLayout gl = new GridLayout(1, false);
|
GridLayout gl = new GridLayout(1, false);
|
||||||
gl.marginHeight = 0;
|
gl.marginHeight = 0;
|
||||||
|
@ -235,14 +250,30 @@ public class CaseCreationDlg extends AbstractArchiveDlg implements
|
||||||
gd = new GridData(220, SWT.DEFAULT);
|
gd = new GridData(220, SWT.DEFAULT);
|
||||||
endTimeLbl = new Label(timeComp, SWT.BORDER);
|
endTimeLbl = new Label(timeComp, SWT.BORDER);
|
||||||
endTimeLbl.setLayoutData(gd);
|
endTimeLbl.setLayoutData(gd);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see
|
||||||
|
* com.raytheon.uf.viz.archive.ui.AbstractArchiveDlg#setRetentionTimes(long)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void setRetentionTimes(long startRetentionHours) {
|
||||||
|
long startTimeOffset = startRetentionHours * TimeUtil.MILLIS_PER_HOUR;
|
||||||
endDate = TimeUtil.newDate();
|
endDate = TimeUtil.newDate();
|
||||||
long time = endDate.getTime();
|
long time = endDate.getTime();
|
||||||
time -= TimeUtil.MILLIS_PER_DAY;
|
time -= startTimeOffset;
|
||||||
startDate = new Date(time);
|
startDate = new Date(time);
|
||||||
|
VizApp.runAsync(new Runnable() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
startTimeLbl.setText(dateFmt.format(startDate));
|
startTimeLbl.setText(dateFmt.format(startDate));
|
||||||
endTimeLbl.setText(dateFmt.format(endDate));
|
endTimeLbl.setText(dateFmt.format(endDate));
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create the case compression controls.
|
* Create the case compression controls.
|
||||||
|
@ -422,7 +453,7 @@ public class CaseCreationDlg extends AbstractArchiveDlg implements
|
||||||
private void createBottomActionButtons() {
|
private void createBottomActionButtons() {
|
||||||
|
|
||||||
Composite actionControlComp = new Composite(shell, SWT.NONE);
|
Composite actionControlComp = new Composite(shell, SWT.NONE);
|
||||||
GridLayout gl = new GridLayout(3, false);
|
GridLayout gl = new GridLayout(7, false);
|
||||||
GridData gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
GridData gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||||
actionControlComp.setLayout(gl);
|
actionControlComp.setLayout(gl);
|
||||||
actionControlComp.setLayoutData(gd);
|
actionControlComp.setLayoutData(gd);
|
||||||
|
@ -438,6 +469,44 @@ public class CaseCreationDlg extends AbstractArchiveDlg implements
|
||||||
// }
|
// }
|
||||||
// });
|
// });
|
||||||
|
|
||||||
|
saveBtn = new Button(actionControlComp, SWT.PUSH);
|
||||||
|
saveBtn.setText(" Save ");
|
||||||
|
saveBtn.addSelectionListener(new SelectionAdapter() {
|
||||||
|
@Override
|
||||||
|
public void widgetSelected(SelectionEvent selectionEvent) {
|
||||||
|
saveSelection(selectName);
|
||||||
|
clearModified();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
saveBtn.setEnabled(false);
|
||||||
|
|
||||||
|
saveAsBtn = new Button(actionControlComp, SWT.PUSH);
|
||||||
|
saveAsBtn.setText(" Save As... ");
|
||||||
|
saveAsBtn.addSelectionListener(new SelectionAdapter() {
|
||||||
|
@Override
|
||||||
|
public void widgetSelected(SelectionEvent selectionEvent) {
|
||||||
|
handleSaveAsCase();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
loadBtn = new Button(actionControlComp, SWT.PUSH);
|
||||||
|
loadBtn.setText(" Load... ");
|
||||||
|
loadBtn.addSelectionListener(new SelectionAdapter() {
|
||||||
|
@Override
|
||||||
|
public void widgetSelected(SelectionEvent selectionEvent) {
|
||||||
|
handleLoadCase();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
deleteBtn = new Button(actionControlComp, SWT.PUSH);
|
||||||
|
deleteBtn.setText(" Delete... ");
|
||||||
|
deleteBtn.addSelectionListener(new SelectionAdapter() {
|
||||||
|
@Override
|
||||||
|
public void widgetSelected(SelectionEvent selectionEvent) {
|
||||||
|
handleDeleteCase();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
generateBtn = new Button(actionControlComp, SWT.PUSH);
|
generateBtn = new Button(actionControlComp, SWT.PUSH);
|
||||||
generateBtn.setText(" Generate ");
|
generateBtn.setText(" Generate ");
|
||||||
generateBtn.setEnabled(false);
|
generateBtn.setEnabled(false);
|
||||||
|
@ -465,11 +534,89 @@ public class CaseCreationDlg extends AbstractArchiveDlg implements
|
||||||
closeBtn.addSelectionListener(new SelectionAdapter() {
|
closeBtn.addSelectionListener(new SelectionAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void widgetSelected(SelectionEvent e) {
|
public void widgetSelected(SelectionEvent e) {
|
||||||
|
if (verifyClose()) {
|
||||||
close();
|
close();
|
||||||
|
} else {
|
||||||
|
e.doit = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void handleSaveAsCase() {
|
||||||
|
if (saveAsDlg == null || saveAsDlg.isDisposed()) {
|
||||||
|
saveAsDlg = new CaseLoadSaveDeleteDlg(shell,
|
||||||
|
CaseLoadSaveDeleteDlg.Type.SaveAs);
|
||||||
|
saveAsDlg.setCloseCallback(new ICloseCallback() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dialogClosed(Object returnValue) {
|
||||||
|
if (returnValue instanceof String) {
|
||||||
|
String name = returnValue.toString();
|
||||||
|
if (saveSelection(name)) {
|
||||||
|
clearModified();
|
||||||
|
loadSelect(name);
|
||||||
|
setSelectName(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
saveAsDlg.open();
|
||||||
|
} else {
|
||||||
|
saveAsDlg.bringToTop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleLoadCase() {
|
||||||
|
if (isModified()
|
||||||
|
&& !MessageDialog.openConfirm(shell, "Case Confirmation",
|
||||||
|
"Unsave changes will be lost.\nPress OK to continue.")) {
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
if (loadDlg == null || loadDlg.isDisposed()) {
|
||||||
|
loadDlg = new CaseLoadSaveDeleteDlg(shell,
|
||||||
|
CaseLoadSaveDeleteDlg.Type.Load);
|
||||||
|
loadDlg.setCloseCallback(new ICloseCallback() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dialogClosed(Object returnValue) {
|
||||||
|
if (returnValue instanceof String) {
|
||||||
|
String name = returnValue.toString();
|
||||||
|
loadSelect(name);
|
||||||
|
populateTableComp();
|
||||||
|
updateTotals(null);
|
||||||
|
setSelectName(name);
|
||||||
|
clearModified();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
loadDlg.open();
|
||||||
|
} else {
|
||||||
|
loadDlg.bringToTop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleDeleteCase() {
|
||||||
|
if (deleteDlg == null || deleteDlg.isDisposed()) {
|
||||||
|
deleteDlg = new CaseLoadSaveDeleteDlg(shell,
|
||||||
|
CaseLoadSaveDeleteDlg.Type.Delete);
|
||||||
|
deleteDlg.setCloseCallback(new ICloseCallback() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dialogClosed(Object returnValue) {
|
||||||
|
if (returnValue instanceof String) {
|
||||||
|
String selectName = returnValue.toString();
|
||||||
|
deleteSelect(selectName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
deleteDlg.open();
|
||||||
|
} else {
|
||||||
|
deleteDlg.bringToTop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Display modal dialog that performs the Generation of the case.
|
* Display modal dialog that performs the Generation of the case.
|
||||||
*/
|
*/
|
||||||
|
@ -782,4 +929,25 @@ public class CaseCreationDlg extends AbstractArchiveDlg implements
|
||||||
endCal.setTimeInMillis(endDate.getTime());
|
endCal.setTimeInMillis(endDate.getTime());
|
||||||
return endCal;
|
return endCal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see com.raytheon.uf.viz.archive.ui.IModifyListener#modified()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void modified() {
|
||||||
|
saveBtn.setEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see com.raytheon.uf.viz.archive.ui.AbstractArchiveDlg#clearModified()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void clearModified() {
|
||||||
|
super.clearModified();
|
||||||
|
saveBtn.setEnabled(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,259 @@
|
||||||
|
/**
|
||||||
|
* This software was developed and / or modified by Raytheon Company,
|
||||||
|
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
*
|
||||||
|
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
* This software product contains export-restricted data whose
|
||||||
|
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
* to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
* an export license or other authorization.
|
||||||
|
*
|
||||||
|
* Contractor Name: Raytheon Company
|
||||||
|
* Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
* Mail Stop B8
|
||||||
|
* Omaha, NE 68106
|
||||||
|
* 402.291.0100
|
||||||
|
*
|
||||||
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
* further licensing information.
|
||||||
|
**/
|
||||||
|
package com.raytheon.uf.viz.archive.ui;
|
||||||
|
|
||||||
|
import org.eclipse.jface.dialogs.MessageDialog;
|
||||||
|
import org.eclipse.swt.SWT;
|
||||||
|
import org.eclipse.swt.events.SelectionAdapter;
|
||||||
|
import org.eclipse.swt.events.SelectionEvent;
|
||||||
|
import org.eclipse.swt.layout.GridData;
|
||||||
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
|
import org.eclipse.swt.widgets.Button;
|
||||||
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.eclipse.swt.widgets.List;
|
||||||
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
import org.eclipse.swt.widgets.Text;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.archive.config.ArchiveConfigManager;
|
||||||
|
import com.raytheon.uf.common.archive.config.ArchiveConstants;
|
||||||
|
import com.raytheon.viz.ui.dialogs.CaveSWTDialog;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dialog to display a list of select files for Load, Save As or Delete.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Jul 31, 2013 2221 rferrel Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author rferrel
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class CaseLoadSaveDeleteDlg extends CaveSWTDialog {
|
||||||
|
public static enum Type {
|
||||||
|
SaveAs("Save As", " Save "), Load("Load", " Load "), Delete("Delete",
|
||||||
|
" Delete ");
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
private String btnLabel;
|
||||||
|
|
||||||
|
private Type(String title, String btnLabel) {
|
||||||
|
this.title = title;
|
||||||
|
this.btnLabel = btnLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBtnLabel() {
|
||||||
|
return btnLabel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Type type;
|
||||||
|
|
||||||
|
private List caseList;
|
||||||
|
|
||||||
|
private Text fileNameText;
|
||||||
|
|
||||||
|
private Button okBtn;
|
||||||
|
|
||||||
|
private Button cancelBtn;
|
||||||
|
|
||||||
|
protected CaseLoadSaveDeleteDlg(Shell parentShell, Type type) {
|
||||||
|
super(parentShell, SWT.DIALOG_TRIM | SWT.RESIZE, CAVE.DO_NOT_BLOCK);
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see
|
||||||
|
* com.raytheon.viz.ui.dialogs.CaveSWTDialogBase#initializeComponents(org
|
||||||
|
* .eclipse.swt.widgets.Shell)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void initializeComponents(Shell shell) {
|
||||||
|
setText(type.getTitle() + " Case");
|
||||||
|
Composite mainComp = new Composite(shell, SWT.NONE);
|
||||||
|
GridLayout gl = new GridLayout(1, false);
|
||||||
|
gl.marginHeight = 0;
|
||||||
|
gl.marginWidth = 0;
|
||||||
|
gl.horizontalSpacing = 0;
|
||||||
|
mainComp.setLayout(gl);
|
||||||
|
init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set up dialog layout.
|
||||||
|
*/
|
||||||
|
private void init() {
|
||||||
|
createCaseControls();
|
||||||
|
GuiUtil.addSeparator(shell, SWT.HORIZONTAL);
|
||||||
|
createBottomAcitonButtons();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main body of the dialog.
|
||||||
|
*/
|
||||||
|
private void createCaseControls() {
|
||||||
|
Composite caseComp = new Composite(shell, SWT.NONE);
|
||||||
|
GridLayout gl = new GridLayout(1, false);
|
||||||
|
GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
|
||||||
|
caseComp.setLayout(gl);
|
||||||
|
caseComp.setLayoutData(gd);
|
||||||
|
|
||||||
|
caseList = new List(caseComp, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
|
||||||
|
gd = new GridData(SWT.FILL, SWT.FILL, true, true);
|
||||||
|
gd.minimumHeight = 300;
|
||||||
|
caseList.setLayoutData(gd);
|
||||||
|
|
||||||
|
caseList.addSelectionListener(new SelectionAdapter() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void widgetSelected(SelectionEvent e) {
|
||||||
|
fileNameText.setText(caseList.getSelection()[0]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
fileNameText = new Text(caseComp, SWT.BORDER | SWT.SINGLE);
|
||||||
|
gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||||
|
fileNameText.setLayoutData(gd);
|
||||||
|
fileNameText.setEditable(type == Type.SaveAs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Button layout at the bottom of the dialog.
|
||||||
|
*/
|
||||||
|
private void createBottomAcitonButtons() {
|
||||||
|
Composite actionControlComp = new Composite(shell, SWT.NONE);
|
||||||
|
GridLayout gl = new GridLayout(2, false);
|
||||||
|
GridData gd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
|
||||||
|
actionControlComp.setLayout(gl);
|
||||||
|
actionControlComp.setLayoutData(gd);
|
||||||
|
okBtn = new Button(actionControlComp, SWT.PUSH);
|
||||||
|
okBtn.setText(type.getBtnLabel());
|
||||||
|
okBtn.addSelectionListener(new SelectionAdapter() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void widgetSelected(SelectionEvent e) {
|
||||||
|
String name = verifyAction();
|
||||||
|
if (name != null) {
|
||||||
|
setReturnValue(name);
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
cancelBtn = new Button(actionControlComp, SWT.PUSH);
|
||||||
|
cancelBtn.setText(" Cancel ");
|
||||||
|
gd = new GridData(SWT.RIGHT, SWT.DEFAULT, true, false);
|
||||||
|
cancelBtn.setLayoutData(gd);
|
||||||
|
cancelBtn.addSelectionListener(new SelectionAdapter() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void widgetSelected(SelectionEvent e) {
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify pending action and return select case name to continue the action.
|
||||||
|
*
|
||||||
|
* @return name when ok to perform action otherwise null
|
||||||
|
*/
|
||||||
|
private String verifyAction() {
|
||||||
|
String name = fileNameText.getText().trim();
|
||||||
|
|
||||||
|
if (name.isEmpty()) {
|
||||||
|
MessageDialog.openError(shell, "Case Error", "Invalid case name.");
|
||||||
|
name = null;
|
||||||
|
} else {
|
||||||
|
switch (type) {
|
||||||
|
case Load:
|
||||||
|
// No need to check since text is not editable.
|
||||||
|
break;
|
||||||
|
case SaveAs:
|
||||||
|
for (String cName : caseList.getItems()) {
|
||||||
|
if (name.equals(cName)) {
|
||||||
|
boolean response = MessageDialog
|
||||||
|
.openConfirm(
|
||||||
|
shell,
|
||||||
|
"Case Confirmation",
|
||||||
|
"Case \""
|
||||||
|
+ name
|
||||||
|
+ "\" exists.\nSelect OK to overwrite.");
|
||||||
|
if (!response) {
|
||||||
|
name = null;
|
||||||
|
fileNameText.selectAll();
|
||||||
|
fileNameText.forceFocus();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Delete:
|
||||||
|
if (!MessageDialog.openConfirm(shell, "Case Confirmation",
|
||||||
|
"Press OK to delete \"" + name + "\".")) {
|
||||||
|
name = null;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
name = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see com.raytheon.viz.ui.dialogs.CaveSWTDialog#preOpened()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void preOpened() {
|
||||||
|
super.preOpened();
|
||||||
|
populateList();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populate case names in the list.
|
||||||
|
*/
|
||||||
|
private void populateList() {
|
||||||
|
caseList.add(ArchiveConstants.defaultSelectName);
|
||||||
|
String[] names = ArchiveConfigManager.getInstance().getSelectionNames(
|
||||||
|
ArchiveConstants.Type.Case);
|
||||||
|
for (String name : names) {
|
||||||
|
if (!ArchiveConstants.defaultSelectName.equals(name)) {
|
||||||
|
caseList.add(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
caseList.select(0);
|
||||||
|
fileNameText.setText(caseList.getItem(0));
|
||||||
|
}
|
||||||
|
}
|
|
@ -98,7 +98,7 @@ public class CaseNameDialog extends CaveSWTDialog {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The xomposite with case name text field.
|
* The composite with case name text field.
|
||||||
*/
|
*/
|
||||||
private void createFieldsComp() {
|
private void createFieldsComp() {
|
||||||
Composite fieldComp = new Composite(shell, SWT.NONE);
|
Composite fieldComp = new Composite(shell, SWT.NONE);
|
||||||
|
|
|
@ -6,6 +6,7 @@ Bundle-Version: 1.0.0.qualifier
|
||||||
Bundle-Vendor: RAYTHEON
|
Bundle-Vendor: RAYTHEON
|
||||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
||||||
Export-Package: com.raytheon.uf.common.archive.config,
|
Export-Package: com.raytheon.uf.common.archive.config,
|
||||||
|
com.raytheon.uf.common.archive.config.select,
|
||||||
com.raytheon.uf.common.archive.exception
|
com.raytheon.uf.common.archive.exception
|
||||||
Require-Bundle: com.raytheon.uf.common.util,
|
Require-Bundle: com.raytheon.uf.common.util,
|
||||||
com.raytheon.uf.common.localization,
|
com.raytheon.uf.common.localization,
|
||||||
|
|
|
@ -21,6 +21,8 @@ package com.raytheon.uf.common.archive.config;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileFilter;
|
import java.io.FileFilter;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.text.FieldPosition;
|
import java.text.FieldPosition;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
|
@ -46,6 +48,9 @@ import org.apache.commons.io.filefilter.FileFilterUtils;
|
||||||
import org.apache.commons.io.filefilter.IOFileFilter;
|
import org.apache.commons.io.filefilter.IOFileFilter;
|
||||||
import org.apache.commons.io.filefilter.RegexFileFilter;
|
import org.apache.commons.io.filefilter.RegexFileFilter;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.archive.config.ArchiveConstants.Type;
|
||||||
|
import com.raytheon.uf.common.archive.config.select.ArchiveSelect;
|
||||||
|
import com.raytheon.uf.common.archive.config.select.CategorySelect;
|
||||||
import com.raytheon.uf.common.archive.exception.ArchiveException;
|
import com.raytheon.uf.common.archive.exception.ArchiveException;
|
||||||
import com.raytheon.uf.common.localization.IPathManager;
|
import com.raytheon.uf.common.localization.IPathManager;
|
||||||
import com.raytheon.uf.common.localization.LocalizationContext;
|
import com.raytheon.uf.common.localization.LocalizationContext;
|
||||||
|
@ -56,6 +61,7 @@ import com.raytheon.uf.common.localization.LocalizationFileInputStream;
|
||||||
import com.raytheon.uf.common.localization.LocalizationFileOutputStream;
|
import com.raytheon.uf.common.localization.LocalizationFileOutputStream;
|
||||||
import com.raytheon.uf.common.localization.PathManagerFactory;
|
import com.raytheon.uf.common.localization.PathManagerFactory;
|
||||||
import com.raytheon.uf.common.localization.exception.LocalizationException;
|
import com.raytheon.uf.common.localization.exception.LocalizationException;
|
||||||
|
import com.raytheon.uf.common.localization.exception.LocalizationOpFailedException;
|
||||||
import com.raytheon.uf.common.status.IUFStatusHandler;
|
import com.raytheon.uf.common.status.IUFStatusHandler;
|
||||||
import com.raytheon.uf.common.status.UFStatus;
|
import com.raytheon.uf.common.status.UFStatus;
|
||||||
import com.raytheon.uf.common.status.UFStatus.Priority;
|
import com.raytheon.uf.common.status.UFStatus.Priority;
|
||||||
|
@ -78,6 +84,7 @@ import com.raytheon.uf.common.util.FileUtil;
|
||||||
* Added null check for topLevelDirs in purgeExpiredFromArchive.
|
* Added null check for topLevelDirs in purgeExpiredFromArchive.
|
||||||
* Changed to use File.delete() instead of Apache FileUtil.deleteQuietly().
|
* Changed to use File.delete() instead of Apache FileUtil.deleteQuietly().
|
||||||
* Added warn logging for failure to delete.
|
* Added warn logging for failure to delete.
|
||||||
|
* Jul 24, 2013 2221 rferrel Changes for select configuration.
|
||||||
*
|
*
|
||||||
* </pre>
|
* </pre>
|
||||||
*
|
*
|
||||||
|
@ -95,7 +102,7 @@ public class ArchiveConfigManager {
|
||||||
public final String ARCHIVE_DIR = "archiver/purger";
|
public final String ARCHIVE_DIR = "archiver/purger";
|
||||||
|
|
||||||
/** Localization manager. */
|
/** Localization manager. */
|
||||||
private IPathManager pathMgr;
|
protected IPathManager pathMgr;
|
||||||
|
|
||||||
private final Map<String, LocalizationFile> archiveNameToLocalizationFileMap = new HashMap<String, LocalizationFile>();
|
private final Map<String, LocalizationFile> archiveNameToLocalizationFileMap = new HashMap<String, LocalizationFile>();
|
||||||
|
|
||||||
|
@ -171,9 +178,34 @@ public class ArchiveConfigManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Obtain the collection of Archives setting the Categories' selections
|
||||||
|
* based on the default retention selections.
|
||||||
|
*
|
||||||
* @return the Collection of Archives.
|
* @return the Collection of Archives.
|
||||||
*/
|
*/
|
||||||
public Collection<ArchiveConfig> getArchives() {
|
public Collection<ArchiveConfig> getArchives() {
|
||||||
|
String fileName = ArchiveConstants.selectFileName(Type.Retention, null);
|
||||||
|
SelectConfig selections = loadSelection(fileName);
|
||||||
|
if (selections != null && !selections.isEmpty()) {
|
||||||
|
try {
|
||||||
|
for (ArchiveSelect archiveSelect : selections.getArchiveList()) {
|
||||||
|
ArchiveConfig archiveConfig = archiveMap.get(archiveSelect
|
||||||
|
.getName());
|
||||||
|
for (CategorySelect categorySelect : archiveSelect
|
||||||
|
.getCategorySelectList()) {
|
||||||
|
CategoryConfig categoryConfig = archiveConfig
|
||||||
|
.getCategory(categorySelect.getName());
|
||||||
|
categoryConfig.setSelectedDisplayNames(categorySelect
|
||||||
|
.getSelectList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (NullPointerException ex) {
|
||||||
|
statusHandler
|
||||||
|
.handle(Priority.ERROR,
|
||||||
|
"Retention selection and Archive configuration no longer in sync: ",
|
||||||
|
ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
return archiveMap.values();
|
return archiveMap.values();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -630,20 +662,6 @@ public class ArchiveConfigManager {
|
||||||
return resultDirs;
|
return resultDirs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the Display labels matching the pattern for the archive data's
|
|
||||||
* category. Assumes the archive data's root directory is the mount point to
|
|
||||||
* start the search.
|
|
||||||
*
|
|
||||||
* @param archiveName
|
|
||||||
* @param categoryName
|
|
||||||
* @return displayInfoList order by display label
|
|
||||||
*/
|
|
||||||
public List<DisplayData> getDisplayData(String archiveName,
|
|
||||||
String categoryName) {
|
|
||||||
return getDisplayData(archiveName, categoryName, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the Display labels matching the pattern for the archive data's
|
* Get the Display labels matching the pattern for the archive data's
|
||||||
* category. Assumes the archive data's root directory is the mount point to
|
* category. Assumes the archive data's root directory is the mount point to
|
||||||
|
@ -788,4 +806,176 @@ public class ArchiveConfigManager {
|
||||||
return archiveConfig;
|
return archiveConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete the selection localized site configuration file.
|
||||||
|
*
|
||||||
|
* @param fileName
|
||||||
|
* @throws LocalizationOpFailedException
|
||||||
|
*/
|
||||||
|
public void deleteSelection(String fileName)
|
||||||
|
throws LocalizationOpFailedException {
|
||||||
|
LocalizationContext siteContext = pathMgr.getContext(
|
||||||
|
LocalizationType.COMMON_STATIC, LocalizationLevel.SITE);
|
||||||
|
LocalizationFile lFile = pathMgr.getLocalizationFile(siteContext,
|
||||||
|
ARCHIVE_DIR + "/" + fileName);
|
||||||
|
lFile.delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the localized site select configuration file.
|
||||||
|
*
|
||||||
|
* @param fileName
|
||||||
|
* @return selectConfig
|
||||||
|
*/
|
||||||
|
public SelectConfig loadSelection(String fileName) {
|
||||||
|
SelectConfig selections = null;
|
||||||
|
LocalizationContext siteContext = pathMgr.getContext(
|
||||||
|
LocalizationType.COMMON_STATIC, LocalizationLevel.SITE);
|
||||||
|
LocalizationFile lFile = pathMgr.getLocalizationFile(siteContext,
|
||||||
|
ARCHIVE_DIR + "/" + fileName);
|
||||||
|
if (lFile.exists()) {
|
||||||
|
FileInputStream stream = null;
|
||||||
|
try {
|
||||||
|
stream = lFile.openInputStream();
|
||||||
|
selections = unmarshallSelectionStream(stream);
|
||||||
|
} catch (LocalizationException e) {
|
||||||
|
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(),
|
||||||
|
e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(),
|
||||||
|
e);
|
||||||
|
} finally {
|
||||||
|
if (stream != null) {
|
||||||
|
try {
|
||||||
|
stream.close();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return selections;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO possible future methods for supporting importing and exporting
|
||||||
|
// select configurations.
|
||||||
|
//
|
||||||
|
// public SelectConfig importSelections(File selectFile) throws IOException
|
||||||
|
// {
|
||||||
|
// SelectConfig selections = null;
|
||||||
|
// FileInputStream stream = new FileInputStream(selectFile);
|
||||||
|
// selections = unmarshallSelectionStream(stream);
|
||||||
|
// return selections;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public boolean exportSelections(SelectConfig selections, File selectFile)
|
||||||
|
// throws IOException, LocalizationException {
|
||||||
|
// FileOutputStream stream = null;
|
||||||
|
// try {
|
||||||
|
// stream = new FileOutputStream(selectFile);
|
||||||
|
// marshalSelectStream(selections, stream);
|
||||||
|
// } finally {
|
||||||
|
// if (stream != null) {
|
||||||
|
// try {
|
||||||
|
// stream.close();
|
||||||
|
// } catch (IOException ex) {
|
||||||
|
// // Ignore
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of selection names based on the select configuration files in
|
||||||
|
* the type's directory.
|
||||||
|
*
|
||||||
|
* @param type
|
||||||
|
* @return selectNames
|
||||||
|
*/
|
||||||
|
public String[] getSelectionNames(ArchiveConstants.Type type) {
|
||||||
|
LocalizationFile[] files = pathMgr.listStaticFiles(ARCHIVE_DIR
|
||||||
|
+ IPathManager.SEPARATOR + type.selectionDir,
|
||||||
|
new String[] { ArchiveConstants.configFileExt }, false, true);
|
||||||
|
String[] names = new String[files.length];
|
||||||
|
int extLen = ArchiveConstants.configFileExt.length();
|
||||||
|
int i = 0;
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
for (LocalizationFile lFile : files) {
|
||||||
|
sb.setLength(0);
|
||||||
|
sb.append(lFile.getName());
|
||||||
|
sb.setLength(sb.length() - extLen);
|
||||||
|
names[i] = sb.substring(sb.lastIndexOf(IPathManager.SEPARATOR) + 1);
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
Arrays.sort(names, String.CASE_INSENSITIVE_ORDER);
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save the selections configuration in the desired file.
|
||||||
|
*
|
||||||
|
* @param selections
|
||||||
|
* @param fileName
|
||||||
|
* @throws LocalizationException
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public void saveSelections(SelectConfig selections, String fileName)
|
||||||
|
throws LocalizationException, IOException {
|
||||||
|
LocalizationFileOutputStream stream = null;
|
||||||
|
LocalizationContext siteContext = pathMgr.getContext(
|
||||||
|
LocalizationType.COMMON_STATIC, LocalizationLevel.SITE);
|
||||||
|
LocalizationFile lFile = pathMgr.getLocalizationFile(siteContext,
|
||||||
|
ARCHIVE_DIR + IPathManager.SEPARATOR + fileName);
|
||||||
|
|
||||||
|
try {
|
||||||
|
stream = lFile.openOutputStream();
|
||||||
|
marshalSelectStream(selections, stream);
|
||||||
|
} finally {
|
||||||
|
if (stream != null) {
|
||||||
|
try {
|
||||||
|
stream.closeAndSave();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
// Ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* load select configuration from the stream.
|
||||||
|
*
|
||||||
|
* @param stream
|
||||||
|
* @return selectConfig
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private SelectConfig unmarshallSelectionStream(FileInputStream stream)
|
||||||
|
throws IOException {
|
||||||
|
SelectConfig selections = null;
|
||||||
|
try {
|
||||||
|
selections = JAXB.unmarshal(stream, SelectConfig.class);
|
||||||
|
} finally {
|
||||||
|
if (stream != null) {
|
||||||
|
try {
|
||||||
|
stream.close();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return selections;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save select configuration to the desired stream.
|
||||||
|
*
|
||||||
|
* @param selections
|
||||||
|
* @param stream
|
||||||
|
* @throws IOException
|
||||||
|
* @throws LocalizationException
|
||||||
|
*/
|
||||||
|
private void marshalSelectStream(SelectConfig selections,
|
||||||
|
FileOutputStream stream) throws IOException, LocalizationException {
|
||||||
|
JAXB.marshal(selections, stream);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,108 @@
|
||||||
|
/**
|
||||||
|
* This software was developed and / or modified by Raytheon Company,
|
||||||
|
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
*
|
||||||
|
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
* This software product contains export-restricted data whose
|
||||||
|
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
* to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
* an export license or other authorization.
|
||||||
|
*
|
||||||
|
* Contractor Name: Raytheon Company
|
||||||
|
* Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
* Mail Stop B8
|
||||||
|
* Omaha, NE 68106
|
||||||
|
* 402.291.0100
|
||||||
|
*
|
||||||
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
* further licensing information.
|
||||||
|
**/
|
||||||
|
package com.raytheon.uf.common.archive.config;
|
||||||
|
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.localization.IPathManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constants used by purger and GUIs.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Jul 23, 2013 #2221 rferrel Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author rferrel
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class ArchiveConstants {
|
||||||
|
|
||||||
|
/** Pattern to find slashes in a string. */
|
||||||
|
private final static Pattern slashPattern = Pattern.compile("[/\\\\]+");
|
||||||
|
|
||||||
|
/** Pattern to find white space in a string. */
|
||||||
|
private final static Pattern wsPattern = Pattern.compile("\\s+");
|
||||||
|
|
||||||
|
/** Default selection name to display. */
|
||||||
|
public static final String defaultSelectName = "DEFAULT";
|
||||||
|
|
||||||
|
/** Extension to use for creating a configuration's file name. */
|
||||||
|
public static final String configFileExt = ".xml";
|
||||||
|
|
||||||
|
/** Types of select configuration and their relative localized directory. */
|
||||||
|
public enum Type {
|
||||||
|
Retention("retention" + IPathManager.SEPARATOR), Case("case"
|
||||||
|
+ IPathManager.SEPARATOR);
|
||||||
|
|
||||||
|
public final String selectionDir;
|
||||||
|
|
||||||
|
private Type(String selectionDir) {
|
||||||
|
this.selectionDir = selectionDir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Do not allow an instance of this class.
|
||||||
|
*/
|
||||||
|
private ArchiveConstants() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get relative path file name for a select configuration file based on type
|
||||||
|
* and name.
|
||||||
|
*
|
||||||
|
* @param type
|
||||||
|
* @param name
|
||||||
|
* - when null use the default select name.
|
||||||
|
* @return fileName
|
||||||
|
*/
|
||||||
|
public static final String selectFileName(Type type, String name) {
|
||||||
|
String fileName = name;
|
||||||
|
if (fileName == null) {
|
||||||
|
fileName = defaultSelectName;
|
||||||
|
} else {
|
||||||
|
fileName = convertToFileName(name);
|
||||||
|
}
|
||||||
|
return type.selectionDir + fileName + configFileExt;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert name to fileName by trimming whitespace, converting slashes to
|
||||||
|
* hyphens and embedded whitespace to underscore.
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* - must not be null
|
||||||
|
* @return fileName
|
||||||
|
*/
|
||||||
|
public static final String convertToFileName(String name) {
|
||||||
|
String fileName = name.trim();
|
||||||
|
fileName = slashPattern.matcher(fileName).replaceAll("-");
|
||||||
|
fileName = wsPattern.matcher(fileName).replaceAll("_");
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,192 @@
|
||||||
|
/**
|
||||||
|
* This software was developed and / or modified by Raytheon Company,
|
||||||
|
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
*
|
||||||
|
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
* This software product contains export-restricted data whose
|
||||||
|
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
* to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
* an export license or other authorization.
|
||||||
|
*
|
||||||
|
* Contractor Name: Raytheon Company
|
||||||
|
* Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
* Mail Stop B8
|
||||||
|
* Omaha, NE 68106
|
||||||
|
* 402.291.0100
|
||||||
|
*
|
||||||
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
* further licensing information.
|
||||||
|
**/
|
||||||
|
package com.raytheon.uf.common.archive.config;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlAccessType;
|
||||||
|
import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
|
||||||
|
import com.raytheon.uf.common.archive.config.select.ArchiveSelect;
|
||||||
|
import com.raytheon.uf.common.archive.config.select.CategorySelect;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select configuraton information for retention and case creation.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Jul 19, 2013 2221 rferrel Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author rferrel
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
@XmlAccessorType(XmlAccessType.NONE)
|
||||||
|
@XmlRootElement(name = "selection")
|
||||||
|
public class SelectConfig {
|
||||||
|
/**
|
||||||
|
* Name of selection.
|
||||||
|
*/
|
||||||
|
@XmlElement(name = "name")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hours to back off Start time from the End time.
|
||||||
|
*/
|
||||||
|
@XmlElement(name = "startRetentionHours")
|
||||||
|
private long starRetentionHours = 24L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of archives
|
||||||
|
*/
|
||||||
|
@XmlElement(name = "archive")
|
||||||
|
private final List<ArchiveSelect> archiveList = new ArrayList<ArchiveSelect>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*/
|
||||||
|
public SelectConfig() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getStarRetentionHours() {
|
||||||
|
return starRetentionHours;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStarRetentionHours(long startRetentionHours) {
|
||||||
|
this.starRetentionHours = startRetentionHours;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ArchiveSelect> getArchiveList() {
|
||||||
|
return archiveList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setArchiveList(List<ArchiveSelect> archiveList) {
|
||||||
|
this.archiveList.clear();
|
||||||
|
this.archiveList.addAll(archiveList);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void add(ArchiveSelect archiveSelect) {
|
||||||
|
archiveList.add(archiveSelect);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @return true when no selections
|
||||||
|
*/
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return archiveList.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a list of selected display names for the archive and its category.
|
||||||
|
*
|
||||||
|
* @param archiveName
|
||||||
|
* @param categoryName
|
||||||
|
* @return displayLabelList may be an empty list.
|
||||||
|
*/
|
||||||
|
public List<String> getSelectedList(String archiveName, String categoryName) {
|
||||||
|
ArchiveSelect archiveSelect = getArchive(archiveName);
|
||||||
|
if (archiveSelect == null || archiveSelect.isEmpty()) {
|
||||||
|
return new ArrayList<String>(0);
|
||||||
|
}
|
||||||
|
CategorySelect categorySelect = getCategorySelect(categoryName,
|
||||||
|
archiveSelect);
|
||||||
|
if (categorySelect == null || categorySelect.isEmpty()) {
|
||||||
|
return new ArrayList<String>(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String> selected = categorySelect.getSelectList();
|
||||||
|
|
||||||
|
return selected;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find archive with given name
|
||||||
|
*
|
||||||
|
* @param archiveName
|
||||||
|
* @return archive select or null if none found. message
|
||||||
|
*/
|
||||||
|
private ArchiveSelect getArchive(String archiveName) {
|
||||||
|
if (!archiveList.isEmpty()) {
|
||||||
|
for (ArchiveSelect archiveSelect : archiveList) {
|
||||||
|
if (archiveName.equals(archiveSelect.getName())) {
|
||||||
|
return archiveSelect;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find category for the given name under the desired archive.
|
||||||
|
*
|
||||||
|
* @param categoryName
|
||||||
|
* @param archiveSelect
|
||||||
|
* @return categorySelect or null if none found
|
||||||
|
*/
|
||||||
|
private CategorySelect getCategorySelect(String categoryName,
|
||||||
|
ArchiveSelect archiveSelect) {
|
||||||
|
if (!archiveSelect.isEmpty()) {
|
||||||
|
for (CategorySelect categorySelect : archiveSelect
|
||||||
|
.getCategorySelectList()) {
|
||||||
|
if (categoryName.equals(categorySelect.getName())) {
|
||||||
|
return categorySelect;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#toString()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("selectData [name: ").append(getName());
|
||||||
|
sb.append(", startRetentionHours: ").append(getStarRetentionHours());
|
||||||
|
sb.append("[");
|
||||||
|
for (ArchiveSelect archiveConfig : getArchiveList()) {
|
||||||
|
sb.append(archiveConfig).append(", ");
|
||||||
|
}
|
||||||
|
sb.append("]]");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,104 @@
|
||||||
|
/**
|
||||||
|
* This software was developed and / or modified by Raytheon Company,
|
||||||
|
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
*
|
||||||
|
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
* This software product contains export-restricted data whose
|
||||||
|
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
* to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
* an export license or other authorization.
|
||||||
|
*
|
||||||
|
* Contractor Name: Raytheon Company
|
||||||
|
* Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
* Mail Stop B8
|
||||||
|
* Omaha, NE 68106
|
||||||
|
* 402.291.0100
|
||||||
|
*
|
||||||
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
* further licensing information.
|
||||||
|
**/
|
||||||
|
package com.raytheon.uf.common.archive.config.select;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlAccessType;
|
||||||
|
import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select configuration archive information.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Jul 19, 2013 2221 rferrel Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author rferrel
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
@XmlAccessorType(XmlAccessType.NONE)
|
||||||
|
@XmlRootElement(name = "archive")
|
||||||
|
public class ArchiveSelect {
|
||||||
|
/**
|
||||||
|
* The archive name.
|
||||||
|
*/
|
||||||
|
@XmlElement(name = "name")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of categories with selections.
|
||||||
|
*/
|
||||||
|
@XmlElement(name = "category")
|
||||||
|
private final List<CategorySelect> categorySelectList = new ArrayList<CategorySelect>();
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<CategorySelect> getCategorySelectList() {
|
||||||
|
return categorySelectList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCategorySelectList(List<CategorySelect> categorySelectList) {
|
||||||
|
this.categorySelectList.clear();
|
||||||
|
this.categorySelectList.addAll(categorySelectList);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void add(CategorySelect categorySelect) {
|
||||||
|
categorySelectList.add(categorySelect);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return categorySelectList.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see java.lang.Object#toString()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("Archive Select [name : ").append(getName());
|
||||||
|
sb.append("[");
|
||||||
|
for (CategorySelect categorySelect : categorySelectList) {
|
||||||
|
sb.append(categorySelect).append(", ");
|
||||||
|
}
|
||||||
|
sb.append("]");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,98 @@
|
||||||
|
/**
|
||||||
|
* This software was developed and / or modified by Raytheon Company,
|
||||||
|
* pursuant to Contract DG133W-05-CQ-1067 with the US Government.
|
||||||
|
*
|
||||||
|
* U.S. EXPORT CONTROLLED TECHNICAL DATA
|
||||||
|
* This software product contains export-restricted data whose
|
||||||
|
* export/transfer/disclosure is restricted by U.S. law. Dissemination
|
||||||
|
* to non-U.S. persons whether in the United States or abroad requires
|
||||||
|
* an export license or other authorization.
|
||||||
|
*
|
||||||
|
* Contractor Name: Raytheon Company
|
||||||
|
* Contractor Address: 6825 Pine Street, Suite 340
|
||||||
|
* Mail Stop B8
|
||||||
|
* Omaha, NE 68106
|
||||||
|
* 402.291.0100
|
||||||
|
*
|
||||||
|
* See the AWIPS II Master Rights File ("Master Rights File.pdf") for
|
||||||
|
* further licensing information.
|
||||||
|
**/
|
||||||
|
package com.raytheon.uf.common.archive.config.select;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlAccessType;
|
||||||
|
import javax.xml.bind.annotation.XmlAccessorType;
|
||||||
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select configuration class that contains a list of selected display labels
|
||||||
|
* for a given category. It is assumed this is associated with a given archive.
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
*
|
||||||
|
* SOFTWARE HISTORY
|
||||||
|
*
|
||||||
|
* Date Ticket# Engineer Description
|
||||||
|
* ------------ ---------- ----------- --------------------------
|
||||||
|
* Jul 19, 2013 2221 rferrel Initial creation
|
||||||
|
*
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @author rferrel
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@XmlAccessorType(XmlAccessType.NONE)
|
||||||
|
@XmlRootElement(name = "archive")
|
||||||
|
public class CategorySelect {
|
||||||
|
/**
|
||||||
|
* The category name.
|
||||||
|
*/
|
||||||
|
@XmlElement(name = "name")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of selected labels.
|
||||||
|
*/
|
||||||
|
@XmlElement(name = "selectedDisplayName")
|
||||||
|
private final List<String> selectList = new ArrayList<String>();
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getSelectList() {
|
||||||
|
return selectList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSelectList(List<String> selectList) {
|
||||||
|
this.selectList.clear();
|
||||||
|
this.selectList.addAll(selectList);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void add(String displayName) {
|
||||||
|
selectList.add(displayName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEmpty() {
|
||||||
|
return selectList.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
sb.append("CategorySelect [ name: ").append(getName());
|
||||||
|
sb.append("[ ");
|
||||||
|
for (String select : getSelectList()) {
|
||||||
|
sb.append("\"").append(select).append("\", ");
|
||||||
|
}
|
||||||
|
sb.append("]");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
}
|
|
@ -92,6 +92,8 @@
|
||||||
<permission id="com.raytheon.localization.site/common_static/datadelivery"/>
|
<permission id="com.raytheon.localization.site/common_static/datadelivery"/>
|
||||||
|
|
||||||
<permission id="com.raytheon.localization.site/common_static/archiver/purger"/>
|
<permission id="com.raytheon.localization.site/common_static/archiver/purger"/>
|
||||||
|
<permission id="com.raytheon.localization.site/common_static/archiver/purger/retention"/>
|
||||||
|
<permission id="com.raytheon.localization.site/common_static/archiver/purger/case"/>
|
||||||
|
|
||||||
<user userId="ALL">
|
<user userId="ALL">
|
||||||
<userPermission>com.raytheon.localization.site/common_static/purge</userPermission>
|
<userPermission>com.raytheon.localization.site/common_static/purge</userPermission>
|
||||||
|
@ -125,6 +127,8 @@
|
||||||
<userPermission>com.raytheon.localization.site/common_static/roles</userPermission>
|
<userPermission>com.raytheon.localization.site/common_static/roles</userPermission>
|
||||||
<userPermission>com.raytheon.localization.site/common_static/datadelivery</userPermission>
|
<userPermission>com.raytheon.localization.site/common_static/datadelivery</userPermission>
|
||||||
<userPermission>com.raytheon.localization.site/common_static/archiver/purger</userPermission>
|
<userPermission>com.raytheon.localization.site/common_static/archiver/purger</userPermission>
|
||||||
|
<userPermission>com.raytheon.localization.site/common_static/archiver/purger/retention</userPermission>
|
||||||
|
<userPermission>com.raytheon.localization.site/common_static/archiver/purger/case</userPermission>
|
||||||
</user>
|
</user>
|
||||||
</nwsRoleData>
|
</nwsRoleData>
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue