Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 23 additions & 9 deletions app/save-and-restore/app/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,33 @@
<version>4.7.3-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.phoebus</groupId>
<artifactId>save-and-restore-common</artifactId>
<version>4.7.3-SNAPSHOT</version>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>5.0.3.201809091024-r</version>
</dependency>


<dependency>
<groupId>org.phoebus</groupId>
<artifactId>save-and-restore-service</artifactId>
<version>4.7.3-SNAPSHOT</version>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.19</version>
</dependency>
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>5.0.3.201809091024-r</version>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.19</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>${jackson.version}</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson.version}</version>
</dependency>

<!-- https://mvnrepository.com/artifact/junit/junit -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ public class Messages {
public static String closeConfigurationWarning;
public static String closeCompositeSnapshotWarning;
public static String closeTabPrompt;
public static String compositeSnapshotConsistencyCheckFailed;
public static String contextMenuAddTagWithComment;
public static String contextMenuCreateSnapshot;
public static String contextMenuCompareSnapshots;
Expand All @@ -47,15 +48,21 @@ public class Messages {
public static String contextMenuTagAsGolden;
public static String contextMenuTagsWithComment;
public static String contextMenuOpenCompositeSnapshotForRestore;

public static String copyOrMoveNotAllowedBody;
public static String copyOrMoveNotAllowedHeader;
public static String copyUniqueIdToClipboard;

public static String createNewTagDialogHeader;
public static String createNewTagDialogTitle;
public static String createCompositeSnapshotFailed;
public static String createConfigurationFailed;
public static String createNodeFailed;
public static String currentPVValue;
public static String currentReadbackValue;
public static String currentSetpointValue;
public static String createNewTagDialogHeader;
public static String createNewTagDialogTitle;
public static String deleteFilter;
public static String deleteFilterFailed;

public static String duplicatePVNamesAdditionalItems;
public static String duplicatePVNamesCheckFailed;
Expand Down Expand Up @@ -110,12 +117,15 @@ public class Messages {
public static String saveFilter;

public static String saveFilterConfirmOverwrite;
public static String saveFilterFailed;

public static String saveSnapshotErrorContent;
public static String saveSnapshotFailed;
public static String saveTagButtonLabel;
public static String search;
public static String searchEntryToolTip;
public static String searchErrorBody;
public static String searchFailed;
public static String searchNoResultsTitle;
public static String searchNoResult;

Expand All @@ -126,6 +136,7 @@ public class Messages {
public static String storedReadbackValue;
public static String storedValues;
public static String tableColumnDeltaValue;
public static String tagAddFailed;
public static String tagNameLabel;
public static String tagCommentLabel;
public static String tagRemoveConfirmationTitle;
Expand All @@ -145,13 +156,16 @@ public class Messages {
public static String toolTipMultiplierSpinner;
public static String unnamedSnapshot;

static
{
public static String updateCompositeSnapshotFailed;
public static String updateConfigurationFailed;

public static String updateNodeFailed;

static {
NLS.initializeMessages(Messages.class);
}

private Messages()
{
private Messages() {
// Prevent instantiation
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,10 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

package org.phoebus.applications.saveandrestore;

import org.phoebus.applications.saveandrestore.model.CompositeSnapshot;
import org.phoebus.applications.saveandrestore.model.CompositeSnapshotData;
import org.phoebus.applications.saveandrestore.model.Configuration;
import org.phoebus.applications.saveandrestore.model.ConfigurationData;
import org.phoebus.applications.saveandrestore.model.Node;
import org.phoebus.applications.saveandrestore.model.Snapshot;
import org.phoebus.applications.saveandrestore.model.SnapshotData;
import org.phoebus.applications.saveandrestore.model.SnapshotItem;
import org.phoebus.applications.saveandrestore.model.Tag;
import org.phoebus.applications.saveandrestore.model.TagData;
package org.phoebus.applications.saveandrestore.client;

import org.phoebus.applications.saveandrestore.SaveAndRestoreClientException;
import org.phoebus.applications.saveandrestore.model.*;
import org.phoebus.applications.saveandrestore.model.search.Filter;
import org.phoebus.applications.saveandrestore.model.search.SearchResult;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,35 +16,20 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

package org.phoebus.applications.saveandrestore.impl;
package org.phoebus.applications.saveandrestore.client;

import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientHandlerException;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.GenericType;
import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.*;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import org.phoebus.applications.saveandrestore.SaveAndRestoreClient;
import org.phoebus.applications.saveandrestore.Messages;
import org.phoebus.applications.saveandrestore.SaveAndRestoreClientException;
import org.phoebus.applications.saveandrestore.model.CompositeSnapshot;
import org.phoebus.applications.saveandrestore.model.CompositeSnapshotData;
import org.phoebus.applications.saveandrestore.model.Configuration;
import org.phoebus.applications.saveandrestore.model.ConfigurationData;
import org.phoebus.applications.saveandrestore.model.Node;
import org.phoebus.applications.saveandrestore.model.Snapshot;
import org.phoebus.applications.saveandrestore.model.SnapshotData;
import org.phoebus.applications.saveandrestore.model.SnapshotItem;
import org.phoebus.applications.saveandrestore.model.Tag;
import org.phoebus.applications.saveandrestore.model.TagData;
import org.phoebus.applications.saveandrestore.model.*;
import org.phoebus.applications.saveandrestore.model.search.Filter;
import org.phoebus.applications.saveandrestore.model.search.SearchResult;
import org.phoebus.applications.saveandrestore.service.Messages;
import org.phoebus.framework.preferences.PreferencesReader;

import javax.ws.rs.core.MultivaluedMap;
Expand All @@ -53,7 +38,7 @@
import java.util.logging.Level;
import java.util.logging.Logger;

public class SaveAndRestoreJerseyClient implements SaveAndRestoreClient {
public class SaveAndRestoreJerseyClient implements org.phoebus.applications.saveandrestore.client.SaveAndRestoreClient {

private final Client client;
private static final String CONTENT_TYPE_JSON = "application/json; charset=UTF-8";
Expand All @@ -66,7 +51,7 @@ public class SaveAndRestoreJerseyClient implements SaveAndRestoreClient {

public SaveAndRestoreJerseyClient() {

PreferencesReader preferencesReader = new PreferencesReader(SaveAndRestoreClient.class, "/client_preferences.properties");
PreferencesReader preferencesReader = new PreferencesReader(SaveAndRestoreClient.class, "/save_and_restore_preferences.properties");
this.jmasarServiceUrl = preferencesReader.get("jmasar.service.url");

int httpClientReadTimeout = DEFAULT_READ_TIMEOUT;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,50 +19,12 @@
*/
package org.phoebus.applications.saveandrestore.datamigration.git;

import org.epics.util.array.ArrayBoolean;
import org.epics.util.array.ArrayByte;
import org.epics.util.array.ArrayDouble;
import org.epics.util.array.ArrayFloat;
import org.epics.util.array.ArrayInteger;
import org.epics.util.array.ArrayLong;
import org.epics.util.array.ArrayShort;
import org.epics.util.array.CollectionNumbers;
import org.epics.util.array.ListBoolean;
import org.epics.util.array.ListByte;
import org.epics.util.array.ListDouble;
import org.epics.util.array.ListFloat;
import org.epics.util.array.ListInteger;
import org.epics.util.array.ListLong;
import org.epics.util.array.ListShort;
import org.epics.util.array.*;
import org.epics.util.stats.Range;
import org.epics.vtype.Alarm;
import org.epics.vtype.AlarmSeverity;
import org.epics.vtype.AlarmStatus;
import org.epics.vtype.Display;
import org.epics.vtype.EnumDisplay;
import org.epics.vtype.Time;
import org.epics.vtype.VBoolean;
import org.epics.vtype.VBooleanArray;
import org.epics.vtype.VByte;
import org.epics.vtype.VByteArray;
import org.epics.vtype.VDouble;
import org.epics.vtype.VDoubleArray;
import org.epics.vtype.VEnum;
import org.epics.vtype.VEnumArray;
import org.epics.vtype.VFloat;
import org.epics.vtype.VFloatArray;
import org.epics.vtype.VInt;
import org.epics.vtype.VIntArray;
import org.epics.vtype.VLong;
import org.epics.vtype.VLongArray;
import org.epics.vtype.VShort;
import org.epics.vtype.VShortArray;
import org.epics.vtype.VString;
import org.epics.vtype.VStringArray;
import org.epics.vtype.VType;
import org.phoebus.applications.saveandrestore.common.VDisconnectedData;
import org.epics.vtype.*;
import org.phoebus.applications.saveandrestore.model.ConfigPv;
import org.phoebus.applications.saveandrestore.model.SnapshotItem;
import org.phoebus.applications.saveandrestore.ui.VDisconnectedData;

import java.io.BufferedReader;
import java.io.IOException;
Expand All @@ -74,13 +36,7 @@
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.*;


/**
Expand Down Expand Up @@ -108,22 +64,14 @@ public final class FileUtilities {
public static final String H_VALUE = "VALUE";
public static final String H_READ_ONLY = "READ_ONLY";
// the complete snapshot file header
public static final String SNAPSHOT_FILE_HEADER = H_PV_NAME + "," + H_SELECTED + "," + H_TIMESTAMP + "," + H_STATUS
+ "," + H_SEVERITY + "," + H_VALUE_TYPE + "," + H_VALUE + "," + H_READBACK + "," + H_READBACK_VALUE + ","
+ H_DELTA + "," + H_READ_ONLY;
public static final String SAVE_SET_HEADER = H_PV_NAME + "," + H_READBACK + "," + H_DELTA + "," + H_READ_ONLY;
// delimiter of array values
private static final String ARRAY_SPLITTER = "\\;";
// delimiter of enum value and enum constants
private static final String ENUM_VALUE_SPLITTER = "\\~";
// proposed length of snapshot file data line entry (pv name only)
private static final int SNP_ENTRY_LENGTH = 700;
// proposed length of configuration data line entry (pv name only)
private static final int BSD_ENTRY_LENGTH = 250;

// the format used to store the timestamp of when the snapshot was taken
private static final ThreadLocal<DateFormat> TIMESTAMP_FORMATTER = ThreadLocal
.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"));
private static final Pattern LINE_BREAK_PATTERN = Pattern.compile("\\n");

/**
* Private constructor to prevent instantiation of this class.
Expand Down Expand Up @@ -158,7 +106,7 @@ public static SnapshotContent readFromSnapshot(InputStream stream) throws IOExce
} else if (header == null) {
header = line.split("\\,");
for (int i = 0; i < header.length; i++) {
headerMap.put(header[i].toUpperCase(Locale.UK), Integer.valueOf(i));
headerMap.put(header[i].toUpperCase(Locale.UK), i);
}
} else {
if (headerMap.isEmpty()) {
Expand All @@ -173,7 +121,6 @@ public static SnapshotContent readFromSnapshot(InputStream stream) throws IOExce
Integer idx = headerMap.get(H_PV_NAME);
String name = idx == null || idx > length ? null : trim(split[idx]);
idx = headerMap.get(H_SELECTED);
String sel = idx == null || idx > length ? null : trim(split[idx]);
idx = headerMap.get(H_TIMESTAMP);
String timestamp = idx == null || idx > length ? null : trim(split[idx]);
idx = headerMap.get(H_STATUS);
Expand All @@ -191,9 +138,8 @@ public static SnapshotContent readFromSnapshot(InputStream stream) throws IOExce
idx = headerMap.get(H_DELTA);
//String delta = idx == null || idx > length ? "" : trim(split[idx]);
idx = headerMap.get(H_READ_ONLY);
Boolean readOnly = idx == null || idx > length ? Boolean.FALSE : Boolean.valueOf(trim(split[idx]));

VType data = null, readbackData = null;
VType data, readbackData;
try {
data = piecesToVType(timestamp, status, severity, value, valueType);
} catch (NumberFormatException | ArrayIndexOutOfBoundsException e) {
Expand Down Expand Up @@ -256,7 +202,7 @@ private static VType piecesToVType(String timestamp, String status, String sever
String[] t = timestamp != null && timestamp.indexOf('.') > 0 ? timestamp.split("\\.")
: new String[]{"0", "0"};
Time time = Time.of(Instant.ofEpochSecond(Long.parseLong(t[0]), Integer.parseInt(t[1])));
AlarmStatus alarmStatus = null;
AlarmStatus alarmStatus;
try {
alarmStatus = AlarmStatus.valueOf(status);
} catch (IllegalArgumentException e) {
Expand All @@ -271,10 +217,9 @@ private static VType piecesToVType(String timestamp, String status, String sever
String[] valueAndLabels = value.split(ENUM_VALUE_SPLITTER);
if (valueAndLabels.length > 0) {
try {
if(valueAndLabels[0].isEmpty()){
if (valueAndLabels[0].isEmpty()) {
valueAndLabels[0] = "";
}
else if (valueAndLabels[0].charAt(0) == '[') {
} else if (valueAndLabels[0].charAt(0) == '[') {
valueAndLabels[0] = valueAndLabels[0].substring(1, valueAndLabels[0].length() - 1);
}
if (valueAndLabels.length > 1) {
Expand Down Expand Up @@ -480,7 +425,7 @@ public static ConfigurationContent readFromConfiguration(InputStream stream) thr
throw new IOException(String.format("Invalid content: %s.", line));
}
// there are no fields in here that may contain a comma
String name = null, readback = null, delta = null;
String name, readback = null, delta = null;
boolean readOnly = false;
if (namesIndex > -1) {
name = trim(split[namesIndex]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@
import org.epics.vtype.VType;
import org.phoebus.applications.saveandrestore.Messages;
import org.phoebus.applications.saveandrestore.SaveAndRestoreApplication;
import org.phoebus.applications.saveandrestore.common.VDisconnectedData;
import org.phoebus.applications.saveandrestore.datamigration.git.FileUtilities;
import org.phoebus.applications.saveandrestore.model.ConfigPv;
import org.phoebus.applications.saveandrestore.model.Node;
Expand All @@ -81,6 +80,7 @@
import org.phoebus.applications.saveandrestore.model.SnapshotData;
import org.phoebus.applications.saveandrestore.model.SnapshotItem;
import org.phoebus.applications.saveandrestore.ui.SaveAndRestoreService;
import org.phoebus.applications.saveandrestore.ui.VDisconnectedData;
import org.phoebus.applications.saveandrestore.ui.configuration.ConfigurationFromSelectionController;
import org.phoebus.framework.nls.NLS;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,7 @@

package org.phoebus.applications.saveandrestore.ui;

import org.phoebus.applications.saveandrestore.SaveAndRestoreClient;
import org.phoebus.applications.saveandrestore.common.VDisconnectedData;
import org.phoebus.applications.saveandrestore.common.VNoData;
import org.phoebus.applications.saveandrestore.impl.SaveAndRestoreJerseyClient;

import org.phoebus.applications.saveandrestore.model.CompositeSnapshot;
import org.phoebus.applications.saveandrestore.model.Configuration;
import org.phoebus.applications.saveandrestore.model.ConfigurationData;
Expand All @@ -34,6 +31,8 @@
import org.phoebus.applications.saveandrestore.model.TagData;
import org.phoebus.applications.saveandrestore.model.search.Filter;
import org.phoebus.applications.saveandrestore.model.search.SearchResult;
import org.phoebus.applications.saveandrestore.client.SaveAndRestoreClient;
import org.phoebus.applications.saveandrestore.client.SaveAndRestoreJerseyClient;

import javax.ws.rs.core.MultivaluedMap;
import java.util.ArrayList;
Expand Down
Loading