-
Notifications
You must be signed in to change notification settings - Fork 781
Initial commit of persistence extensions #1872
Changes from 4 commits
12c7c31
b532fa5
dfbbf7a
bcaa729
6779175
81fe974
c192e76
5b1238c
4632f69
406327b
acdf26a
c11d8c1
ad90d05
4a22703
1d36e4b
2bcb6af
04e65e9
1c0c9fd
1c3aa20
829fd5d
d093a17
6610b71
cbcd900
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
/** | ||
* Copyright (c) 2014-2015 openHAB UG (haftungsbeschraenkt) and others. | ||
* All rights reserved. This program and the accompanying materials | ||
* are made available under the terms of the Eclipse Public License v1.0 | ||
* which accompanies this distribution, and is available at | ||
* http://www.eclipse.org/legal/epl-v10.html | ||
*/ | ||
package org.eclipse.smarthome.core.persistence; | ||
|
||
import java.util.Date; | ||
|
||
import org.eclipse.smarthome.core.items.Item; | ||
|
||
/** | ||
* This class provides an interface to the a {@link PersistenceService} to allow data to be stored | ||
* at a specific time. This allows bindings that interface to devices that store data internally, | ||
* and then periodically provide it to the server to be accommodated. | ||
* | ||
* @author Chris Jackson - Initial implementation and API | ||
* | ||
*/ | ||
public interface ModifiablePersistenceService extends QueryablePersistenceService { | ||
/** | ||
* <p> | ||
* Stores the historic item value. This allows the item, time and value to be specified. | ||
* </p> | ||
* <p> | ||
* Implementors should keep in mind that all registered {@link PersistenceService}s are called synchronously. Hence | ||
* long running operations should be processed asynchronously. E.g. <code>store</code> adds things to a queue which | ||
* is processed by some asynchronous workers (Quartz Job, Thread, etc.). | ||
* </p> | ||
* | ||
* @param item the data to be stored | ||
* @param date the date of the record | ||
*/ | ||
void store(Item item, Date date); | ||
|
||
/** | ||
* Removes data associated with an item from a persistence service. | ||
* If all data is removed for the specified item, the persistence service should free any resources associated with | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please update the javadoc - the filtercriteria might not filter for a specific item at all, so this method is applicable for many items at the same time as well. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not sure I follow. I assumed that there must be an item name provided - it's not possible to add a filter with multiple item names, and I think it would be dangerous to add a filter with no item name. As discussed elsewhere, in the REST interface at least, it is required. Technically it would be possible to implement a filter that removed data from multiple items, but is it a good idea? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Well, if you look at FilterCriteria, it reads: So in general, it allows that the itemName is null and hence the filter is applicable for ANY item. As your method accepts a filter criteria as a parameter, you have to deal with that fact. If you do not want to allow itemName to be null, you should document this in the JavaDoc and declare an exception that you will throw in that case. |
||
* the item (eg. remove any tables or delete files from the storage). | ||
* | ||
* @param filter the filter to apply to the data removal | ||
* @return true if the query executed successfully | ||
*/ | ||
boolean remove(FilterCriteria filter); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
/** | ||
* Copyright (c) 2014-2015 openHAB UG (haftungsbeschraenkt) and others. | ||
* All rights reserved. This program and the accompanying materials | ||
* are made available under the terms of the Eclipse Public License v1.0 | ||
* which accompanies this distribution, and is available at | ||
* http://www.eclipse.org/legal/epl-v10.html | ||
*/ | ||
package org.eclipse.smarthome.core.persistence; | ||
|
||
/** | ||
* This class provides information about an item that is stored in a persistence service. | ||
* It is used to return information about the item to the system | ||
* | ||
* @author Chris Jackson - Initial contribution | ||
* | ||
*/ | ||
public interface PersistenceItemInfo { | ||
/** | ||
* Returns the item name. | ||
* It should be noted that the item name is as stored in the persistence service and as such may not be linked to an | ||
* item. This may be the case if the item was removed from the system, but data still exists in the persistence | ||
* service. | ||
* | ||
* @return Item name | ||
*/ | ||
String getName(); | ||
|
||
/** | ||
* Returns the number of rows of data associated with the item | ||
* Note that this should be used as a guide to the amount of data and may note be 100% accurate. If accurate | ||
* information is required, the {@link QueryablePersistenceService#query} method should be used. | ||
* | ||
* @return count of the number of rows of data. | ||
*/ | ||
Integer getRows(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,20 +7,34 @@ | |
*/ | ||
package org.eclipse.smarthome.core.persistence; | ||
|
||
import java.util.Set; | ||
|
||
import org.eclipse.smarthome.core.items.Item; | ||
|
||
/** | ||
* A queryable persistence service which can be used to store and retrieve | ||
* data from openHAB. This is most likely some kind of database system. | ||
* | ||
* @author Kai Kreuzer - Initial contribution and API | ||
* @author Chris Jackson - Added getItems method | ||
*/ | ||
public interface QueryablePersistenceService extends PersistenceService { | ||
|
||
/** | ||
* Queries the {@link PersistenceService} for data with a given filter criteria | ||
* | ||
* | ||
* @param filter the filter to apply to the query | ||
* @return a time series of items | ||
*/ | ||
Iterable<HistoricItem> query(FilterCriteria filter); | ||
|
||
/** | ||
* Returns a list of items that are stored in the persistence service | ||
* | ||
* This is returned as a string to allow the persistence service to return items that are no long available as an | ||
* ESH {@link Item}. | ||
* | ||
* @return list of strings of item names contained in the store | ||
*/ | ||
Set<PersistenceItemInfo> getItems(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Better rename the method to |
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -40,6 +40,7 @@ Import-Package: com.google.common.base, | |
org.eclipse.smarthome.io.rest, | ||
org.eclipse.smarthome.io.rest.core.item, | ||
org.eclipse.smarthome.io.rest.core.thing, | ||
org.openhab.core.items, | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. ESH should not rely on an OH package |
||
org.osgi.framework, | ||
org.osgi.service.cm, | ||
org.osgi.service.component, | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
/** | ||
* Copyright (c) 2014-2015 openHAB UG (haftungsbeschraenkt) and others. | ||
* All rights reserved. This program and the accompanying materials | ||
* are made available under the terms of the Eclipse Public License v1.0 | ||
* which accompanies this distribution, and is available at | ||
* http://www.eclipse.org/legal/epl-v10.html | ||
*/ | ||
package org.eclipse.smarthome.io.rest.core.persistence; | ||
|
||
/** | ||
* This is a java bean that is used to serialize information about items in a persistence service to JSON. | ||
* | ||
* @author Chris Jackson - Initial Contribution | ||
* | ||
*/ | ||
public class PersistenceItemInfoBean { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Note that we by now always call such beans DTOs and where ever they might be relevant for serialization anywhere else than the REST API as well (e.g. for the payload of events), we put those DTOs in the core bundle in a sub-package "dto" (here it would be org.eclipse.smarthome.core.persistence.dto). Could you possibly refactor the existing "Beans" in this package to follow this convention? |
||
PersistenceItemInfoBean() { | ||
} | ||
|
||
/** | ||
* The name of the item in the persistence service | ||
*/ | ||
public String name; | ||
|
||
/** | ||
* The number of rows of data in the persistence store for the item | ||
*/ | ||
public Integer rows; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could you re-run "mvn license:format" to update the headers to the latest version?