GUACAMOLE-394: Split ConnectionRecord model and ModeledConnectionRecord into ActivityRecordModel and ModeledActivityRecord, etc. mirroring changes to guacamole-ext.

This commit is contained in:
Michael Jumper
2017-09-12 12:18:05 -07:00
parent 3d7b8ee89b
commit c991ea46bc
9 changed files with 282 additions and 190 deletions

View File

@@ -0,0 +1,167 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.guacamole.auth.jdbc.base;
import java.util.Date;
/**
* A single activity record representing an arbitrary activity performed by a
* user.
*/
public class ActivityRecordModel {
/**
* The database ID of the user associated with this activity record.
*/
private Integer userID;
/**
* The username of the user that performed the activity.
*/
private String username;
/**
* The remote host associated with the user that performed the activity.
*/
private String remoteHost;
/**
* The time the activity was initiated by the associated user.
*/
private Date startDate;
/**
* The time the activity ended, or null if the end time is not known or
* the activity is still in progress.
*/
private Date endDate;
/**
* Returns the database ID of the user associated with this activity
* record.
*
* @return
* The database ID of the user associated with this activity record.
*/
public Integer getUserID() {
return userID;
}
/**
* Sets the database ID of the user associated with this activity record.
*
* @param userID
* The database ID of the user to associate with this activity
* record.
*/
public void setUserID(Integer userID) {
this.userID = userID;
}
/**
* Returns the username of the user that performed the activity associated
* with this record.
*
* @return
* The username of the user that performed the activity associated with
* this record.
*/
public String getUsername() {
return username;
}
/**
* Sets the username of the user that performed the activity associated
* with this record.
*
* @param username
* The username of the user that performed the activity associated with
* this record.
*/
public void setUsername(String username) {
this.username = username;
}
/**
* Returns the remote host associated with the user that performed the
* activity.
*
* @return
* The remote host associated with the user that performed the activity.
*/
public String getRemoteHost() {
return remoteHost;
}
/**
* Sets the remote host associated with the user that performed the
* activity.
*
* @param remoteHost
* The remote host associated with the user that performed the activity.
*/
public void setRemoteHost(String remoteHost) {
this.remoteHost = remoteHost;
}
/**
* Returns the time the activity was initiated by the associated user.
*
* @return
* The time the activity was initiated by the associated user.
*/
public Date getStartDate() {
return startDate;
}
/**
* Sets the time the activity was initiated by the associated user.
*
* @param startDate
* The time the activity was initiated by the associated user.
*/
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
/**
* Returns the time the activity ended, or null if the end time is not
* known or the activity is still in progress.
*
* @return
* The time the activity ended, or null if the end time is not known or
* the activity is still in progress.
*/
public Date getEndDate() {
return endDate;
}
/**
* Sets the time the activity ended, if known.
*
* @param endDate
* The time the activity ended, or null if the end time is not known or
* the activity is still in progress.
*/
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
}

View File

@@ -17,7 +17,7 @@
* under the License. * under the License.
*/ */
package org.apache.guacamole.auth.jdbc.connection; package org.apache.guacamole.auth.jdbc.base;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
@@ -25,11 +25,11 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
/** /**
* A search term for querying historical connection records. This will contain * A search term for querying historical records of arbitrary activities. This
* a the search term in string form and, if that string appears to be a date. a * will contain a the search term in string form and, if that string appears to
* corresponding date range. * be a date. a corresponding date range.
*/ */
public class ConnectionRecordSearchTerm { public class ActivityRecordSearchTerm {
/** /**
* A pattern that can match a year, year and month, or year and month and * A pattern that can match a year, year and month, or year and month and
@@ -180,7 +180,7 @@ public class ConnectionRecordSearchTerm {
} }
/** /**
* Creates a new ConnectionRecordSearchTerm representing the given string. * Creates a new ActivityRecordSearchTerm representing the given string.
* If the given string appears to be a date, the start and end dates of the * If the given string appears to be a date, the start and end dates of the
* implied date range will be automatically determined and made available * implied date range will be automatically determined and made available
* via getStartDate() and getEndDate() respectively. * via getStartDate() and getEndDate() respectively.
@@ -188,7 +188,7 @@ public class ConnectionRecordSearchTerm {
* @param term * @param term
* The string that should be searched for. * The string that should be searched for.
*/ */
public ConnectionRecordSearchTerm(String term) { public ActivityRecordSearchTerm(String term) {
// Search terms absolutely must not be null // Search terms absolutely must not be null
if (term == null) if (term == null)
@@ -281,10 +281,10 @@ public class ConnectionRecordSearchTerm {
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (obj == null || !(obj instanceof ConnectionRecordSearchTerm)) if (obj == null || !(obj instanceof ActivityRecordSearchTerm))
return false; return false;
return ((ConnectionRecordSearchTerm) obj).getTerm().equals(getTerm()); return ((ActivityRecordSearchTerm) obj).getTerm().equals(getTerm());
} }

View File

@@ -17,18 +17,18 @@
* under the License. * under the License.
*/ */
package org.apache.guacamole.auth.jdbc.connection; package org.apache.guacamole.auth.jdbc.base;
import org.apache.guacamole.net.auth.ActivityRecordSet; import org.apache.guacamole.net.auth.ActivityRecordSet;
/** /**
* A sort predicate which species the property to use when sorting connection * A sort predicate which species the property to use when sorting activity
* records, along with the sort order. * records, along with the sort order.
*/ */
public class ConnectionRecordSortPredicate { public class ActivityRecordSortPredicate {
/** /**
* The property to use when sorting ConnectionRecords. * The property to use when sorting ActivityRecords.
*/ */
private final ActivityRecordSet.SortableProperty property; private final ActivityRecordSet.SortableProperty property;
@@ -38,26 +38,26 @@ public class ConnectionRecordSortPredicate {
private final boolean descending; private final boolean descending;
/** /**
* Creates a new ConnectionRecordSortPredicate with the given sort property * Creates a new ActivityRecordSortPredicate with the given sort property
* and sort order. * and sort order.
* *
* @param property * @param property
* The property to use when sorting ConnectionRecords. * The property to use when sorting ActivityRecords.
* *
* @param descending * @param descending
* Whether the sort order is descending (true) or ascending (false). * Whether the sort order is descending (true) or ascending (false).
*/ */
public ConnectionRecordSortPredicate(ActivityRecordSet.SortableProperty property, public ActivityRecordSortPredicate(ActivityRecordSet.SortableProperty property,
boolean descending) { boolean descending) {
this.property = property; this.property = property;
this.descending = descending; this.descending = descending;
} }
/** /**
* Returns the property that should be used when sorting ConnectionRecords. * Returns the property that should be used when sorting ActivityRecords.
* *
* @return * @return
* The property that should be used when sorting ConnectionRecords. * The property that should be used when sorting ActivityRecords.
*/ */
public ActivityRecordSet.SortableProperty getProperty() { public ActivityRecordSet.SortableProperty getProperty() {
return property; return property;

View File

@@ -0,0 +1,73 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.guacamole.auth.jdbc.base;
import java.util.Date;
import org.apache.guacamole.net.auth.ActivityRecord;
/**
* An ActivityRecord which is backed by a database model.
*/
public class ModeledActivityRecord implements ActivityRecord {
/**
* The model object backing this activity record.
*/
private final ActivityRecordModel model;
/**
* Creates a new ModeledActivityRecord backed by the given model object.
* Changes to this record will affect the backing model object, and changes
* to the backing model object will affect this record.
*
* @param model
* The model object to use to back this activity record.
*/
public ModeledActivityRecord(ActivityRecordModel model) {
this.model = model;
}
@Override
public Date getStartDate() {
return model.getStartDate();
}
@Override
public Date getEndDate() {
return model.getEndDate();
}
@Override
public String getRemoteHost() {
return model.getRemoteHost();
}
@Override
public String getUsername() {
return model.getUsername();
}
@Override
public boolean isActive() {
return false;
}
}

View File

@@ -21,6 +21,8 @@ package org.apache.guacamole.auth.jdbc.connection;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import org.apache.guacamole.auth.jdbc.base.ActivityRecordSearchTerm;
import org.apache.guacamole.auth.jdbc.base.ActivityRecordSortPredicate;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.guacamole.auth.jdbc.user.UserModel; import org.apache.guacamole.auth.jdbc.user.UserModel;
@@ -75,8 +77,8 @@ public interface ConnectionRecordMapper {
* @return * @return
* The results of the search performed with the given parameters. * The results of the search performed with the given parameters.
*/ */
List<ConnectionRecordModel> search(@Param("terms") Collection<ConnectionRecordSearchTerm> terms, List<ConnectionRecordModel> search(@Param("terms") Collection<ActivityRecordSearchTerm> terms,
@Param("sortPredicates") List<ConnectionRecordSortPredicate> sortPredicates, @Param("sortPredicates") List<ActivityRecordSortPredicate> sortPredicates,
@Param("limit") int limit); @Param("limit") int limit);
/** /**
@@ -104,8 +106,8 @@ public interface ConnectionRecordMapper {
* The results of the search performed with the given parameters. * The results of the search performed with the given parameters.
*/ */
List<ConnectionRecordModel> searchReadable(@Param("user") UserModel user, List<ConnectionRecordModel> searchReadable(@Param("user") UserModel user,
@Param("terms") Collection<ConnectionRecordSearchTerm> terms, @Param("terms") Collection<ActivityRecordSearchTerm> terms,
@Param("sortPredicates") List<ConnectionRecordSortPredicate> sortPredicates, @Param("sortPredicates") List<ActivityRecordSortPredicate> sortPredicates,
@Param("limit") int limit); @Param("limit") int limit);
} }

View File

@@ -19,14 +19,14 @@
package org.apache.guacamole.auth.jdbc.connection; package org.apache.guacamole.auth.jdbc.connection;
import java.util.Date; import org.apache.guacamole.auth.jdbc.base.ActivityRecordModel;
/** /**
* A single connection record representing a past usage of a particular * A single connection record representing a past usage of a particular
* connection. If the connection was being shared, the sharing profile used to * connection. If the connection was being shared, the sharing profile used to
* join the connection is included in the record. * join the connection is included in the record.
*/ */
public class ConnectionRecordModel { public class ConnectionRecordModel extends ActivityRecordModel {
/** /**
* The identifier of the connection associated with this connection record. * The identifier of the connection associated with this connection record.
@@ -53,32 +53,6 @@ public class ConnectionRecordModel {
*/ */
private String sharingProfileName; private String sharingProfileName;
/**
* The database ID of the user associated with this connection record.
*/
private Integer userID;
/**
* The username of the user associated with this connection record.
*/
private String username;
/**
* The remote host associated with this connection record.
*/
private String remoteHost;
/**
* The time the connection was initiated by the associated user.
*/
private Date startDate;
/**
* The time the connection ended, or null if the end time is not known or
* the connection is still running.
*/
private Date endDate;
/** /**
* Returns the identifier of the connection associated with this connection * Returns the identifier of the connection associated with this connection
* record. * record.
@@ -179,109 +153,4 @@ public class ConnectionRecordModel {
this.sharingProfileName = sharingProfileName; this.sharingProfileName = sharingProfileName;
} }
/**
* Returns the database ID of the user associated with this connection
* record.
*
* @return
* The database ID of the user associated with this connection record.
*/
public Integer getUserID() {
return userID;
}
/**
* Sets the database ID of the user associated with this connection record.
*
* @param userID
* The database ID of the user to associate with this connection
* record.
*/
public void setUserID(Integer userID) {
this.userID = userID;
}
/**
* Returns the username of the user associated with this connection record.
*
* @return
* The username of the user associated with this connection record.
*/
public String getUsername() {
return username;
}
/**
* Sets the username of the user associated with this connection record.
*
* @param username
* The username of the user to associate with this connection record.
*/
public void setUsername(String username) {
this.username = username;
}
/**
* Returns the remote host associated with this connection record.
*
* @return
* The remote host associated with this connection record.
*/
public String getRemoteHost() {
return remoteHost;
}
/**
* Sets the remote host associated with this connection record.
*
* @param remoteHost
* The remote host to associate with this connection record.
*/
public void setRemoteHost(String remoteHost) {
this.remoteHost = remoteHost;
}
/**
* Returns the date that the associated connection was established.
*
* @return
* The date the associated connection was established.
*/
public Date getStartDate() {
return startDate;
}
/**
* Sets the date that the associated connection was established.
*
* @param startDate
* The date that the associated connection was established.
*/
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
/**
* Returns the date that the associated connection ended, or null if no
* end date was recorded. The lack of an end date does not necessarily
* mean that the connection is still active.
*
* @return
* The date the associated connection ended, or null if no end date was
* recorded.
*/
public Date getEndDate() {
return endDate;
}
/**
* Sets the date that the associated connection ended.
*
* @param endDate
* The date that the associated connection ended.
*/
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
} }

View File

@@ -26,6 +26,8 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.GuacamoleException;
import org.apache.guacamole.auth.jdbc.base.ActivityRecordSearchTerm;
import org.apache.guacamole.auth.jdbc.base.ActivityRecordSortPredicate;
import org.apache.guacamole.auth.jdbc.base.RestrictedObject; import org.apache.guacamole.auth.jdbc.base.RestrictedObject;
import org.apache.guacamole.net.auth.ActivityRecordSet; import org.apache.guacamole.net.auth.ActivityRecordSet;
import org.apache.guacamole.net.auth.ActivityRecordSet.SortableProperty; import org.apache.guacamole.net.auth.ActivityRecordSet.SortableProperty;
@@ -52,8 +54,8 @@ public class ConnectionRecordSet extends RestrictedObject
* connection record not matching each of the strings within the collection * connection record not matching each of the strings within the collection
* will be excluded from the results. * will be excluded from the results.
*/ */
private final Set<ConnectionRecordSearchTerm> requiredContents = private final Set<ActivityRecordSearchTerm> requiredContents =
new HashSet<ConnectionRecordSearchTerm>(); new HashSet<ActivityRecordSearchTerm>();
/** /**
* The maximum number of connection history records that should be returned * The maximum number of connection history records that should be returned
@@ -66,8 +68,8 @@ public class ConnectionRecordSet extends RestrictedObject
* records, describing the properties involved and the sort order for those * records, describing the properties involved and the sort order for those
* properties. * properties.
*/ */
private final List<ConnectionRecordSortPredicate> connectionRecordSortPredicates = private final List<ActivityRecordSortPredicate> connectionRecordSortPredicates =
new ArrayList<ConnectionRecordSortPredicate>(); new ArrayList<ActivityRecordSortPredicate>();
@Override @Override
public Collection<ConnectionRecord> asCollection() public Collection<ConnectionRecord> asCollection()
@@ -79,7 +81,7 @@ public class ConnectionRecordSet extends RestrictedObject
@Override @Override
public ConnectionRecordSet contains(String value) public ConnectionRecordSet contains(String value)
throws GuacamoleException { throws GuacamoleException {
requiredContents.add(new ConnectionRecordSearchTerm(value)); requiredContents.add(new ActivityRecordSearchTerm(value));
return this; return this;
} }
@@ -93,7 +95,7 @@ public class ConnectionRecordSet extends RestrictedObject
public ConnectionRecordSet sort(SortableProperty property, boolean desc) public ConnectionRecordSet sort(SortableProperty property, boolean desc)
throws GuacamoleException { throws GuacamoleException {
connectionRecordSortPredicates.add(new ConnectionRecordSortPredicate( connectionRecordSortPredicates.add(new ActivityRecordSortPredicate(
property, property,
desc desc
)); ));

View File

@@ -34,6 +34,8 @@ import org.apache.guacamole.auth.jdbc.tunnel.GuacamoleTunnelService;
import org.apache.guacamole.GuacamoleClientException; import org.apache.guacamole.GuacamoleClientException;
import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.GuacamoleException;
import org.apache.guacamole.GuacamoleSecurityException; import org.apache.guacamole.GuacamoleSecurityException;
import org.apache.guacamole.auth.jdbc.base.ActivityRecordSearchTerm;
import org.apache.guacamole.auth.jdbc.base.ActivityRecordSortPredicate;
import org.apache.guacamole.auth.jdbc.base.ModeledChildDirectoryObjectService; import org.apache.guacamole.auth.jdbc.base.ModeledChildDirectoryObjectService;
import org.apache.guacamole.auth.jdbc.permission.ConnectionPermissionMapper; import org.apache.guacamole.auth.jdbc.permission.ConnectionPermissionMapper;
import org.apache.guacamole.auth.jdbc.permission.ObjectPermissionMapper; import org.apache.guacamole.auth.jdbc.permission.ObjectPermissionMapper;
@@ -460,8 +462,8 @@ public class ConnectionService extends ModeledChildDirectoryObjectService<Modele
* If permission to read the connection history is denied. * If permission to read the connection history is denied.
*/ */
public List<ConnectionRecord> retrieveHistory(ModeledAuthenticatedUser user, public List<ConnectionRecord> retrieveHistory(ModeledAuthenticatedUser user,
Collection<ConnectionRecordSearchTerm> requiredContents, Collection<ActivityRecordSearchTerm> requiredContents,
List<ConnectionRecordSortPredicate> sortPredicates, int limit) List<ActivityRecordSortPredicate> sortPredicates, int limit)
throws GuacamoleException { throws GuacamoleException {
List<ConnectionRecordModel> searchResults; List<ConnectionRecordModel> searchResults;

View File

@@ -20,13 +20,14 @@
package org.apache.guacamole.auth.jdbc.connection; package org.apache.guacamole.auth.jdbc.connection;
import java.util.Date; import org.apache.guacamole.auth.jdbc.base.ModeledActivityRecord;
import org.apache.guacamole.net.auth.ConnectionRecord; import org.apache.guacamole.net.auth.ConnectionRecord;
/** /**
* A ConnectionRecord which is backed by a database model. * A ConnectionRecord which is backed by a database model.
*/ */
public class ModeledConnectionRecord implements ConnectionRecord { public class ModeledConnectionRecord extends ModeledActivityRecord
implements ConnectionRecord {
/** /**
* The model object backing this connection record. * The model object backing this connection record.
@@ -42,6 +43,7 @@ public class ModeledConnectionRecord implements ConnectionRecord {
* The model object to use to back this connection record. * The model object to use to back this connection record.
*/ */
public ModeledConnectionRecord(ConnectionRecordModel model) { public ModeledConnectionRecord(ConnectionRecordModel model) {
super(model);
this.model = model; this.model = model;
} }
@@ -65,29 +67,4 @@ public class ModeledConnectionRecord implements ConnectionRecord {
return model.getSharingProfileName(); return model.getSharingProfileName();
} }
@Override
public Date getStartDate() {
return model.getStartDate();
}
@Override
public Date getEndDate() {
return model.getEndDate();
}
@Override
public String getRemoteHost() {
return model.getRemoteHost();
}
@Override
public String getUsername() {
return model.getUsername();
}
@Override
public boolean isActive() {
return false;
}
} }