1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.abstracthorizon.proximity.logic;
19
20 import java.util.Date;
21
22 import org.abstracthorizon.proximity.AccessDeniedException;
23 import org.abstracthorizon.proximity.Item;
24 import org.abstracthorizon.proximity.ProximityRequest;
25 import org.abstracthorizon.proximity.Repository;
26 import org.abstracthorizon.proximity.RepositoryNotAvailableException;
27
28
29
30
31
32
33
34
35 public class DefaultExpiringProxyingRepositoryLogic
36 extends DefaultProxyingRepositoryLogic
37 {
38
39
40 public static final long NO_EXPIRATION = -1000;
41
42
43 public static final String METADATA_EXPIRES = "item.expires";
44
45
46 private long itemExpirationPeriod = 86400 * 1000;
47
48
49
50
51
52
53 public long getItemExpirationPeriodInSeconds()
54 {
55 return itemExpirationPeriod / 1000;
56 }
57
58
59
60
61
62
63 public void setItemExpirationPeriodInSeconds( long itemExpirationPeriod )
64 {
65 this.itemExpirationPeriod = itemExpirationPeriod * 1000;
66 }
67
68
69
70
71
72
73
74
75
76
77 public Item afterLocalCopyFound( Repository repository, ProximityRequest request, Item item )
78 {
79 if ( item.getProperties().getMetadata( DefaultExpiringProxyingRepositoryLogic.METADATA_EXPIRES ) != null )
80 {
81 logger.debug( "Item has expiration, checking it." );
82 Date expires = new Date( Long.parseLong( item.getProperties().getMetadata(
83 DefaultExpiringProxyingRepositoryLogic.METADATA_EXPIRES ) ) );
84 if ( expires.before( new Date( System.currentTimeMillis() ) ) )
85 {
86 logger.info( "Item has expired on " + expires + ", DELETING it." );
87 try
88 {
89 repository.deleteItem( request );
90 }
91 catch ( RepositoryNotAvailableException ex )
92 {
93 logger.warn( "Repository unavailable, cannot delete expired item.", ex );
94 }
95 catch ( AccessDeniedException ex )
96 {
97 logger.warn( "Access is denied, cannot delete expired item.", ex );
98 }
99 return null;
100 }
101 }
102 return item;
103 }
104
105
106
107
108
109
110
111
112
113
114
115 public Item afterRemoteCopyFound( Repository repository, ProximityRequest request, Item localItem, Item remoteItem )
116 {
117 if ( itemExpirationPeriod != NO_EXPIRATION )
118 {
119 Date expires = new Date( System.currentTimeMillis() + itemExpirationPeriod );
120 logger.info( "Setting expires on item to " + expires.toString() );
121 remoteItem.getProperties().setMetadata(
122 DefaultExpiringProxyingRepositoryLogic.METADATA_EXPIRES,
123 Long.toString( expires.getTime() ) );
124 }
125 return remoteItem;
126 }
127
128 }