Subversion Repositories bacoAlunos

Rev

Rev 1675 | Rev 1802 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
203 jmachado 1
package pt.estgp.estgweb.services.data;
2
 
730 jmachado 3
import org.dom4j.Document;
4
import org.dom4j.DocumentFactory;
5
import org.dom4j.Element;
332 jmachado 6
import pt.estgp.estgweb.domain.*;
203 jmachado 7
import pt.estgp.estgweb.domain.dao.DaoFactory;
8
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
9
import pt.estgp.estgweb.services.data.impl.DefaultRepositoryFile;
1703 jmachado 10
import pt.estgp.estgweb.services.data.types.AbstractRepositorySourceModuleInterfacePlugin;
218 jmachado 11
import pt.estgp.estgweb.web.utils.DatesUtils;
730 jmachado 12
import pt.utl.ist.berserk.logic.serviceManager.IService;
203 jmachado 13
 
14
import java.io.InputStream;
730 jmachado 15
import java.util.ArrayList;
203 jmachado 16
import java.util.Date;
17
import java.util.HashSet;
218 jmachado 18
import java.util.List;
203 jmachado 19
 
20
/**
21
 * @author Jorge Machado
22
 * @date 4/Jun/2008
23
 * @see pt.estgp.estgweb.services.data
24
 */
25
public class RepositoryService implements IService
26
{
27
 
1703 jmachado 28
    public 1.5.0/docs/api/java/lang/String.html">String storeRepositoryFile(5+0%2Fdocs%2Fapi+InputStream">InputStream stream, 1.5.0/docs/api/java/lang/String.html">String contentType, 1.5.0/docs/api/java/lang/String.html">String extension, int size, 1.5.0/docs/api/java/lang/String.html">String name, 1.5.0/docs/api/java/lang/String.html">String description, ResourceAccessControlEnum accessControl, AbstractRepositorySourceModuleInterfacePlugin sourceModuleInterfacePlugin, UserSession userSession)
730 jmachado 29
    {
1703 jmachado 30
        return storeRepositoryFile(stream,contentType,extension,size,name,description,accessControl, sourceModuleInterfacePlugin, userSession.getUser());
730 jmachado 31
    }
203 jmachado 32
    /**
1703 jmachado 33
     *
335 jmachado 34
     * @param stream        .
35
     * @param contentType   .
1703 jmachado 36
     * @param extension     .
335 jmachado 37
     * @param size          .
38
     * @param name          .
39
     * @param description   .
40
     * @param accessControl .
1703 jmachado 41
     * @param sourceModuleInterfacePlugin
42
     *@param user   .  @return the identifier to retrieve the document
203 jmachado 43
     */
1703 jmachado 44
    public 1.5.0/docs/api/java/lang/String.html">String storeRepositoryFile(5+0%2Fdocs%2Fapi+InputStream">InputStream stream, 1.5.0/docs/api/java/lang/String.html">String contentType, 1.5.0/docs/api/java/lang/String.html">String extension, int size, 1.5.0/docs/api/java/lang/String.html">String name, 1.5.0/docs/api/java/lang/String.html">String description, ResourceAccessControlEnum accessControl, AbstractRepositorySourceModuleInterfacePlugin sourceModuleInterfacePlugin, User user)
203 jmachado 45
    {
46
        RepositoryFileImpl repositoryFile = DomainObjectFactory.createRepositoryFileImpl();
47
        repositoryFile.setSaveDate(new 5+0%2Fdocs%2Fapi+Date">Date());
215 jmachado 48
        repositoryFile.setDeleted(false);
203 jmachado 49
        repositoryFile.setAccessControl(accessControl.getKey());
730 jmachado 50
        repositoryFile.setOwner(user);
1703 jmachado 51
        repositoryFile.setSourceModule(sourceModuleInterfacePlugin);
203 jmachado 52
        DaoFactory.getRepositoryFileDaoImpl().save(repositoryFile);
53
 
1675 jmachado 54
        //todo getMD5Checksum()
55
        //   System.out.println(getMD5Checksum(new File("/Volumes/Home/jorgemachado/Documents/FileZilla_3.24.0_macosx-x86.app.tar.bz2")));
56
        //System.out.println(compareTwoFiles(new File("/Volumes/Home/jorgemachado/Documents/FileZilla_3.24.0_macosx-x86.app.tar.bz2"), new File("/Volumes/Home/jorgemachado/Documents/FileZilla_3.24.0_macosx-x86.app.tar-copia.bz2")));
203 jmachado 57
        RepositoryFileVersionImpl repositoryFileVersion = createVersion(repositoryFile);
58
        repositoryFileVersion.setName(name);
59
        repositoryFileVersion.setSize(size);
60
        repositoryFileVersion.setDescription(description);
61
        repositoryFileVersion.setContentType(contentType);
204 jmachado 62
        repositoryFileVersion.setExtension(extension);
203 jmachado 63
 
332 jmachado 64
        5+0%2Fdocs%2Fapi+Document">Document dom = createXMLdescription(repositoryFileVersion);
335 jmachado 65
        RepositoryManager.storeDescription(dom, repositoryFileVersion.getId());
66
        RepositoryManager.store(stream, repositoryFileVersion.getId());
203 jmachado 67
        return new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder().append(repositoryFile.getId()).toString();
68
    }
69
 
70
 
215 jmachado 71
    /**
335 jmachado 72
     * @param stream        .
332 jmachado 73
     * @param contentType   .
335 jmachado 74
     * @param size          .
75
     * @param name          .
76
     * @param description   .
77
     * @param identifier    .
78
     * @param extension     .
332 jmachado 79
     * @param accessControl .
203 jmachado 80
     */
204 jmachado 81
    public void updateRepositoryFile(1.5.0/docs/api/java/lang/String.html">String identifier, 5+0%2Fdocs%2Fapi+InputStream">InputStream stream, 1.5.0/docs/api/java/lang/String.html">String contentType, 1.5.0/docs/api/java/lang/String.html">String extension, int size, 1.5.0/docs/api/java/lang/String.html">String name, 1.5.0/docs/api/java/lang/String.html">String description, ResourceAccessControlEnum accessControl)
203 jmachado 82
    {
83
 
204 jmachado 84
        RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().get(1.5.0/docs/api/java/lang/Long.html">Long.parseLong(identifier));
203 jmachado 85
        repositoryFile.setSaveDate(new 5+0%2Fdocs%2Fapi+Date">Date());
86
        repositoryFile.setAccessControl(accessControl.getKey());
87
        RepositoryFileVersionImpl repositoryFileVersion = createVersion(repositoryFile);
88
        repositoryFileVersion.setName(name);
89
        repositoryFileVersion.setSize(size);
90
        repositoryFileVersion.setDescription(description);
91
        repositoryFileVersion.setContentType(contentType);
204 jmachado 92
        repositoryFileVersion.setExtension(extension);
332 jmachado 93
        5+0%2Fdocs%2Fapi+Document">Document dom = createXMLdescription(repositoryFileVersion);
335 jmachado 94
        RepositoryManager.storeDescription(dom, repositoryFileVersion.getId());
95
        RepositoryManager.store(stream, repositoryFileVersion.getId());
203 jmachado 96
    }
97
 
215 jmachado 98
 
203 jmachado 99
    /**
332 jmachado 100
     * @param identifier .
203 jmachado 101
     * @return a view of a document
102
     */
103
    public RepositoryFileImpl loadView(1.5.0/docs/api/java/lang/String.html">String identifier)
104
    {
204 jmachado 105
        RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().get(1.5.0/docs/api/java/lang/Long.html">Long.parseLong(identifier));
335 jmachado 106
        for (RepositoryFileVersionImpl version : repositoryFile.getRepositoryFileVersions())
203 jmachado 107
        {
108
            version.getSaveDate();
109
        }
110
        return repositoryFile;
111
    }
112
 
760 jmachado 113
 
114
    public RepositoryFileImpl loadView(1.5.0/docs/api/java/lang/String.html">String identifier,UserSession sess)
115
       {
116
           RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().get(1.5.0/docs/api/java/lang/Long.html">Long.parseLong(identifier));
117
           for (RepositoryFileVersionImpl version : repositoryFile.getRepositoryFileVersions())
118
           {
119
               version.getSaveDate();
120
           }
121
           return repositoryFile;
122
       }
123
 
1106 jmachado 124
    public IRepositoryFile loadByIdentifier(1.5.0/docs/api/java/lang/String.html">String identifier)
1103 jmachado 125
    {
126
        return load(identifier,null);
127
    }
1670 jmachado 128
 
203 jmachado 129
    /**
1670 jmachado 130
     * load a INputStream view of the last version only
131
     * @param identifier
203 jmachado 132
     * @return a view with an inputStream for document
133
     */
1670 jmachado 134
 
1675 jmachado 135
 
335 jmachado 136
    public IRepositoryFile load(1.5.0/docs/api/java/lang/String.html">String identifier, UserSession userSession)
203 jmachado 137
    {
138
        DefaultRepositoryFile iRepositoryFile = new DefaultRepositoryFile();
139
        RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().load(1.5.0/docs/api/java/lang/Long.html">Long.parseLong(identifier));
140
        iRepositoryFile.setContentType(repositoryFile.getLastVersion().getContentType());
141
        iRepositoryFile.setSize(repositoryFile.getLastVersion().getSize());
142
        iRepositoryFile.setName(repositoryFile.getLastVersion().getName());
143
        iRepositoryFile.setInput(RepositoryManager.load(repositoryFile.getLastVersion().getId()));
1586 jmachado 144
        iRepositoryFile.setExtension(repositoryFile.getLastVersion().getExtension());
203 jmachado 145
        return iRepositoryFile;
146
    }
147
 
148
    /**
335 jmachado 149
     * @param identifier  .
150
     * @param userSession .
218 jmachado 151
     * @return a view with an inputStream for document
152
     */
760 jmachado 153
    public IRepositoryFile loadVersion(1.5.0/docs/api/java/lang/String.html">String identifier, UserSession userSession)
154
    {
155
        DefaultRepositoryFile iRepositoryFile = new DefaultRepositoryFile();
156
        RepositoryFileVersionImpl repositoryFile = (RepositoryFileVersionImpl) DaoFactory.getRepositoryFileVersionDaoImpl().load(1.5.0/docs/api/java/lang/Long.html">Long.parseLong(identifier));
157
        iRepositoryFile.setContentType(repositoryFile.getContentType());
158
        iRepositoryFile.setSize(repositoryFile.getSize());
159
        iRepositoryFile.setName(repositoryFile.getName());
160
        iRepositoryFile.setInput(RepositoryManager.load(repositoryFile.getId()));
1586 jmachado 161
        iRepositoryFile.setExtension(repositoryFile.getExtension());
760 jmachado 162
        return iRepositoryFile;
163
    }
164
 
165
    /**
166
     * @param identifier  .
167
     * @param userSession .
168
     * @return a view with an inputStream for document
169
     */
335 jmachado 170
    public List<IRepositoryFile> loadVersions(1.5.0/docs/api/java/lang/String.html">String identifier, UserSession userSession)
218 jmachado 171
    {
172
        RepositoryFileImpl repositoryFile = (RepositoryFileImpl) DaoFactory.getRepositoryFileDaoImpl().load(1.5.0/docs/api/java/lang/Long.html">Long.parseLong(identifier));
173
        List<IRepositoryFile> versions = new ArrayList<IRepositoryFile>();
335 jmachado 174
        for (RepositoryFileVersionImpl version : repositoryFile.getRepositoryFileVersions())
218 jmachado 175
        {
176
            DefaultRepositoryFile iRepositoryFile = new DefaultRepositoryFile();
177
            iRepositoryFile.setContentType(version.getContentType());
178
            iRepositoryFile.setSize(version.getSize());
179
            iRepositoryFile.setName(DatesUtils.getStringFromDateForFilename(version.getSaveDate()) + "-" + version.getName());
180
            iRepositoryFile.setInput(RepositoryManager.load(version.getId()));
1586 jmachado 181
            iRepositoryFile.setExtension(version.getExtension());
218 jmachado 182
            versions.add(iRepositoryFile);
183
        }
184
        return versions;
185
    }
186
 
187
    /**
203 jmachado 188
     * Create a new File Version
335 jmachado 189
     *
332 jmachado 190
     * @param repositoryFile .
191
     * @return .
203 jmachado 192
     */
193
    private RepositoryFileVersionImpl createVersion(RepositoryFileImpl repositoryFile)
194
    {
195
        RepositoryFileVersionImpl repositoryFileVersion = DomainObjectFactory.createRepositoryFileVersionImpl();
196
        repositoryFileVersion.setRepositoryFile(repositoryFile);
335 jmachado 197
        if (repositoryFile.getRepositoryFileVersions() == null)
204 jmachado 198
            repositoryFile.setRepositoryFileVersions(new HashSet<RepositoryFileVersionImpl>());
203 jmachado 199
        repositoryFile.getRepositoryFileVersions().add(repositoryFileVersion);
200
        repositoryFile.setLastVersion(repositoryFileVersion);
201
        DaoFactory.getRepositoryFileVersionDaoImpl().save(repositoryFileVersion);
202
        return repositoryFileVersion;
203
    }
332 jmachado 204
 
1703 jmachado 205
    public static 5+0%2Fdocs%2Fapi+Document">Document createXMLdescription(RepositoryFileVersionImpl repositoryFileVersion)
332 jmachado 206
    {
207
        org.dom4j.5+0%2Fdocs%2Fapi+Document">Document dom = DocumentFactory.getInstance().createDocument();
208
        5+0%2Fdocs%2Fapi+Element">Element rootElement = DocumentFactory.getInstance().createElement("repositoryFileVersion");
209
        dom.setRootElement(rootElement);
210
 
1703 jmachado 211
 
212
 
213
        rootElement.addAttribute("id", "" + repositoryFileVersion.getId());
214
 
334 jmachado 215
        5+0%2Fdocs%2Fapi+Element">Element saveDate = DocumentFactory.getInstance().createElement("saveDate");
1703 jmachado 216
        saveDate.setText(""+DatesUtils.getStringFromDateForFilename(repositoryFileVersion.getSaveDate()));
334 jmachado 217
 
218
        5+0%2Fdocs%2Fapi+Element">Element name = DocumentFactory.getInstance().createElement("name");
1703 jmachado 219
        name.setText("" + repositoryFileVersion.getName());
334 jmachado 220
 
1703 jmachado 221
 
222
 
334 jmachado 223
        5+0%2Fdocs%2Fapi+Element">Element contentType = DocumentFactory.getInstance().createElement("contentType");
1703 jmachado 224
        contentType.setText(""+repositoryFileVersion.getContentType());
334 jmachado 225
 
226
        5+0%2Fdocs%2Fapi+Element">Element extension = DocumentFactory.getInstance().createElement("extension");
1703 jmachado 227
        extension.setText("" + repositoryFileVersion.getExtension());
334 jmachado 228
 
229
        5+0%2Fdocs%2Fapi+Element">Element size = DocumentFactory.getInstance().createElement("sizeKb");
1703 jmachado 230
        size.setText("" + repositoryFileVersion.getSizeKb());
334 jmachado 231
 
232
        5+0%2Fdocs%2Fapi+Element">Element description = DocumentFactory.getInstance().createElement("description");
1703 jmachado 233
        description.setText(repositoryFileVersion.getDescription());
334 jmachado 234
 
332 jmachado 235
        rootElement.add(saveDate);
236
        rootElement.add(name);
237
        rootElement.add(contentType);
238
        rootElement.add(extension);
239
        rootElement.add(size);
240
        rootElement.add(description);
241
 
242
        //Repository File Generics
243
        5+0%2Fdocs%2Fapi+Element">Element repositoryFileElem = DocumentFactory.getInstance().createElement("repositoryFile");
244
        rootElement.add(repositoryFileElem);
245
 
1703 jmachado 246
        repositoryFileElem.addAttribute("id", "" + repositoryFileVersion.getRepositoryFile().getId());
334 jmachado 247
        5+0%2Fdocs%2Fapi+Element">Element rSaveDate = DocumentFactory.getInstance().createElement("saveDate");
1703 jmachado 248
        rSaveDate.setText(""+DatesUtils.getStringFromDateForFilename(repositoryFileVersion.getRepositoryFile().getSaveDate()));
334 jmachado 249
 
250
        5+0%2Fdocs%2Fapi+Element">Element rUpdateDate = DocumentFactory.getInstance().createElement("updateDate");
1703 jmachado 251
        rUpdateDate.setText(""+DatesUtils.getStringFromDateForFilename(repositoryFileVersion.getRepositoryFile().getUpdateDate()));
334 jmachado 252
 
253
 
254
        5+0%2Fdocs%2Fapi+Element">Element accessControl = DocumentFactory.getInstance().createElement("accessControl");
1703 jmachado 255
        accessControl.setText(repositoryFileVersion.getRepositoryFile().getAccessControl());
334 jmachado 256
 
1703 jmachado 257
        5+0%2Fdocs%2Fapi+Element">Element sourceModule = DocumentFactory.getInstance().createElement("sourceModule");
258
        if(repositoryFileVersion.getRepositoryFile().getSourceModule() != null)
259
            sourceModule.setText(repositoryFileVersion.getRepositoryFile().getSourceModule().getModuleName());
260
        else
261
            sourceModule.setText("null");
262
 
263
 
334 jmachado 264
        5+0%2Fdocs%2Fapi+Element">Element deleted = DocumentFactory.getInstance().createElement("deleted");
1703 jmachado 265
        deleted.setText("" + repositoryFileVersion.getRepositoryFile().isDeleted());
334 jmachado 266
 
332 jmachado 267
        repositoryFileElem.add(rSaveDate);
268
        repositoryFileElem.add(rUpdateDate);
269
        repositoryFileElem.add(accessControl);
270
        repositoryFileElem.add(deleted);
271
 
272
        5+0%2Fdocs%2Fapi+Element">Element owner = DocumentFactory.getInstance().createElement("owner");
273
        repositoryFileElem.add(owner);
1703 jmachado 274
        owner.addAttribute("id", "" + repositoryFileVersion.getRepositoryFile().getOwner().getId());
334 jmachado 275
 
1703 jmachado 276
        if (repositoryFileVersion.getRepositoryFile().getOwner().getName() != null)
335 jmachado 277
        {
278
            5+0%2Fdocs%2Fapi+Element">Element oName = DocumentFactory.getInstance().createElement("name");
1703 jmachado 279
            oName.setText(repositoryFileVersion.getRepositoryFile().getOwner().getName());
335 jmachado 280
            owner.add(oName);
281
        }
334 jmachado 282
 
335 jmachado 283
        if (DocumentFactory.getInstance().createElement("roles") != null)
284
        {
285
            5+0%2Fdocs%2Fapi+Element">Element oRoles = DocumentFactory.getInstance().createElement("roles");
1703 jmachado 286
            oRoles.setText(repositoryFileVersion.getRepositoryFile().getOwner().getRoles());
335 jmachado 287
            owner.add(oRoles);
288
        }
289
 
334 jmachado 290
        5+0%2Fdocs%2Fapi+Element">Element oClass = DocumentFactory.getInstance().createElement("class");
1703 jmachado 291
        oClass.setText(repositoryFileVersion.getRepositoryFile().getOwner().getClass().getSimpleName());
334 jmachado 292
 
335 jmachado 293
 
332 jmachado 294
        owner.add(oClass);
1703 jmachado 295
        if (repositoryFileVersion.getRepositoryFile().getOwner() instanceof User)
332 jmachado 296
        {
334 jmachado 297
            5+0%2Fdocs%2Fapi+Element">Element oUsername = DocumentFactory.getInstance().createElement("username");
1703 jmachado 298
            if(((User) repositoryFileVersion.getRepositoryFile().getOwner()).getUsername() == null)
745 jmachado 299
                oUsername.setText("UNKNOWN");
300
            else
1703 jmachado 301
                oUsername.setText(((User) repositoryFileVersion.getRepositoryFile().getOwner()).getUsername());
335 jmachado 302
            owner.add(oUsername);
334 jmachado 303
 
1703 jmachado 304
            if (((User) repositoryFileVersion.getRepositoryFile().getOwner()).getEmail() != null)
335 jmachado 305
            {
306
                5+0%2Fdocs%2Fapi+Element">Element oEmail = DocumentFactory.getInstance().createElement("email");
1703 jmachado 307
                oEmail.setText(((User) repositoryFileVersion.getRepositoryFile().getOwner()).getEmail());
335 jmachado 308
                owner.add(oEmail);
309
            }
334 jmachado 310
 
1703 jmachado 311
            if (((User) repositoryFileVersion.getRepositoryFile().getOwner()).getOutEmail() != null)
335 jmachado 312
            {
313
                5+0%2Fdocs%2Fapi+Element">Element outEmail = DocumentFactory.getInstance().createElement("outEmail");
1703 jmachado 314
                outEmail.setText(((User) repositoryFileVersion.getRepositoryFile().getOwner()).getOutEmail());
335 jmachado 315
                owner.add(outEmail);
316
            }
334 jmachado 317
 
1703 jmachado 318
            if (((User) repositoryFileVersion.getRepositoryFile().getOwner()).getBi() != null)
335 jmachado 319
            {
320
                5+0%2Fdocs%2Fapi+Element">Element biEmail = DocumentFactory.getInstance().createElement("bi");
1703 jmachado 321
                biEmail.setText(((User) repositoryFileVersion.getRepositoryFile().getOwner()).getBi());
335 jmachado 322
                owner.add(biEmail);
323
            }
334 jmachado 324
 
335 jmachado 325
 
1703 jmachado 326
            if (repositoryFileVersion.getRepositoryFile().getOwner() instanceof Teacher)
332 jmachado 327
            {
334 jmachado 328
                5+0%2Fdocs%2Fapi+Element">Element code = DocumentFactory.getInstance().createElement("teacherCode");
1703 jmachado 329
                code.setText("" + ((Teacher) repositoryFileVersion.getRepositoryFile().getOwner()).getSigesCode());
332 jmachado 330
                owner.add(code);
331
            }
1703 jmachado 332
            if (repositoryFileVersion.getRepositoryFile().getOwner() instanceof Student)
332 jmachado 333
            {
334 jmachado 334
                5+0%2Fdocs%2Fapi+Element">Element code = DocumentFactory.getInstance().createElement("studentCode");
1703 jmachado 335
                code.setText("" + ((Student) repositoryFileVersion.getRepositoryFile().getOwner()).getSigesCode());
332 jmachado 336
                owner.add(code);
337
            }
338
        }
339
        return dom;
340
    }
203 jmachado 341
}