Rev 1680 | Rev 1726 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<%@ page import="jomm.dao.impl.AbstractDao" %>
<%@ page import="pt.estgp.estgweb.domain.RepositoryDocumentCollection" %>
<%@ page import="pt.estgp.estgweb.domain.RepositoryDocumentCollectionImpl" %>
<%@ page import="pt.estgp.estgweb.domain.RepositoryDocumentImpl" %>
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
<%@ page import="java.util.List" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.IServiceManager" %>
<%@ page import="pt.utl.ist.berserk.logic.serviceManager.ServiceManager" %>
<%@ page import="org.json.JSONArray" %>
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="bacoTags" tagdir="/WEB-INF/tags" %>
<%@ taglib prefix="logic" uri="/WEB-INF/tlds/struts-logic.tld" %>
<%@ taglib prefix="baco" uri="/WEB-INF/tlds/baco.tld" %>
<style>
.btn {
margin-right: 8px;
}
.tree-node,.angular-ui-tree-handle {
background: #f8faff;
border: 1px solid #dae2ea;
color: #7c9eb2;
padding: 10px 10px;
}
.ui-tree-node
{
padding: 10px;
}
.angular-ui-tree-handle:hover {
color: #438eb9;
background: #f4f6f7;
border-color: #dce2e8;
}
.angular-ui-tree-placeholder {
background: #f0f9ff;
border: 2px dashed #bed2db;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
.nodeEmpty {
height: 50px;
margin:10px;
margin-left: 30px;
border: 1px dashed blue;
}
.group-title {
background-color: #687074 !important;
color: #FFF !important;
}
/* --- Tree --- */
.tree-node {
border: 1px solid #dae2ea;
background: #f8faff;
color: #7c9eb2;
}
.tree-node-document {
border: 1px solid #000000;
background: #ffffff;
color: #000000;
}
.tree-node-file {
border: 1px solid #e8ea99;
background: #fffae7;
color: #b2a418;
}
.tree-node-description {
border: 1px dashed #7f7f7e;
background: #e5e5e3;
color: #0d0c01;
}
.nodrop {
background-color: #f2dede;
}
.nodrag {
background-color: #f2eec1;
}
.tree-node-content {
margin: 10px;
}
/*Estilo adicionado por mim para os movidos*/
.moved
{
border: 2px solid blue !important;
}
.modified
{
border: 4px dashed orange !important;
}
</style>
<div class="container-fluid">
<%
IServiceManager sm = ServiceManager.getInstance();
String[] names = new String[]{};
Object[] args = new Object[]{null};
JSONArray roots = (JSONArray) sm.execute(RequestUtils.getRequester(request, response), "OpenRepositoryCollection", args, names);
AbstractDao.getCurrentSession().beginTransaction();
String collectionsJson = roots.toString();
request.setAttribute("collectionsJson", collectionsJson);
%>
<div id="treeAppPageContent" ng-app="treeAppPageContent" ng-controller="treeAppPageContentController">
<script>
ping();
var treeAppPageContent = angular.module('treeAppPageContent', ['ui.tree']);
GLOBAL_BacoAngularAppDependencies.push('treeAppPageContent');
<!-- estes codigos todos do remove e do toggle e etc's não mechi em nada limitei-me a copiar dos gajos-->
treeAppPageContent.controller('treeAppPageContentController', function ($scope) {
$scope.data = ${collectionsJson};
$scope.onlyVisibles = false;
/*
$scope.data = [
{
"id" : 1,
"name" : "Nao deixa fazer drag",
"nodrag" : true,
"isDirectory" : true
},
{
"id" : 2,
"name" : "Nao deixa fazer drop",
"nodrop" : true,
"isDirectory" : true
},
{
"id" : 3,
"name" : "Deixa fazer Tudo",
"isDirectory" : true
},
{
"id" : 4,
"name" : "Deixa fazer Tudo e ja foi movido",
"moved" : true,
"isDirectory" : true
},
{
"id" : 5,
"name" : "Exemplo de folha nao deixa abrir",
"isDirectory" : false
}
];*/
$scope.treeOptions = {
accept: function(sourceNodeScope, destNodesScope, destIndex) {
return true;
},
dropped: function(e) {
//console.log (e.source.nodeScope.$modelValue);
//alert ("Largado o nó com nome: " + e.source.nodeScope.$modelValue.name + " sobre " + e.dest.nodesScope.$parent.$modelValue.name);
}
};
$scope.openedAndHasNotChilds = function(node)
{
if(node.childs == null)
return false;
return node.childs.length == 0;
}
$scope.openItem = function(item)
{
//apenas deixa abrir neste caso
if(item.open && item.open==true)
{
item.open=false;
delete item.childs;
delete item.documents;
}
else
{
widgetCallWithActionParameters(
"<%=request.getContextPath()%>/user/repositoryDoc.do",
"openRepositoryCollection",
{
"id" : item.id
},
"#treeAppPageContent",
function(json)
{
item.childs = json.collections;
item.open = true;
$scope.$apply();
});
widgetCallWithActionParameters(
"<%=request.getContextPath()%>/user/repositoryDoc.do",
"openRepositoryCollectionDocuments",
{
"id" : item.id
},
"#treeAppPageContent",
function(json)
{
item.documents = json.documents;
item.open = true;
$scope.$apply();
$('#treeAppPageContent [data-toggle="tooltip"]').tooltip();
});
}
}
$scope.openDocumentsItem = function(item)
{
var collapseElement = $("#repositoryFiles" + item.id);
if(item.open && item.open==true)
{
item.open=false;
collapseElement.collapse("hide");
}
else
{
item.open=true;
collapseElement.collapse("show");
}
}
$scope.hideNode = function(node)
{
if(!node.visible && $scope.onlyVisibles)
return true;
return false;
}
//COPIADAS DO ficheiro repositoryDocument.jsp
$scope.setDocumentFileInvisible = function(docFile)
{
docFile.visible=false;
docFile.repositoryFileProxy.repositoryFile.accessControl ="resource.access.privateDomain";
}
$scope.setDocumentFileVisible = function(docFile)
{
docFile.visible=true;
alert("As permissões do ficheiro serão definidas como privadas, por favor escolha as permissões novas.");
docFile.repositoryFileProxy.repositoryFile.accessControl ="resource.access.privateDomain";
}
}
);
</script>
<!--TEMPLATE RECURSIVO-->
<script type="text/ng-template" id="childs_renderer.html">
<!--Para nao deixar fazer drag-->
<div data-nodrag class="tree-node tree-node-content clearfix" ng-class="{modified: node.modified, nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved, bacoInvisible: !node.visible, hidden: hideNode(node)}">
<a class="btn btn-xs" ng-class="{
'btn-default': !node.open,
'btn-success': node.open,
}"
data-nodrag ng-click="openItem(node)">
<span
class="glyphicon"
ng-class="{
'glyphicon-chevron-right': !node.open,
'glyphicon-chevron-down': node.open
}">
</span>
</a>
<span style="margin-right: 5px" class="glyphicon "
ng-class="{
'glyphicon-folder-close': !node.open,
'glyphicon-folder-open': node.open,
}"
></span>
<label data-toggle="tooltip" title="Esta colecção está oculta!" ng-show="node.visible == false">
<span class="glyphicon glyphicon-ban-circle"/>
</label>
{{node.name}}
</div>
<ol data-nodrag ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node" ng-class="{hidden: collapsed }">
<li ng-repeat="node in node.childs" ui-tree-node ng-include="'childs_renderer.html'">
</li>
<li ng-repeat="node in node.documents" ui-tree-node ng-include="'documents_renderer.html'">
</li>
</ol>
</script>
<!--TEMPLATE RECURSIVO-->
<script type="text/ng-template" id="documents_renderer.html">
<!--Para nao deixar fazer drag-->
<div data-nodrag class="tree-node tree-node-document tree-node-content clearfix" ng-class="{modified: node.modified, nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved, bacoInvisible: !node.visible, hidden: hideNode(node)}">
<a class="btn btn-xs" ng-class="{
'btn-default': !node.open,
'btn-success': node.open,
}"
data-nodrag data-toggle="collapse" ng-click="openDocumentsItem(node)">
<span
class="glyphicon"
ng-class="{
'glyphicon-chevron-right': !node.open,
'glyphicon-chevron-down': node.open
}">
</span>
</a>
<label data-toggle="tooltip" title="Este documento está oculto!" ng-show="node.visible == false">
<span class="glyphicon glyphicon-ban-circle"/>
</label>
<span class="glyphicon glyphicon-file"></span> {{node.title}}
<baco:hasRole role="admin,all,repositoryDocs">
<a target="_blank" class="pull-right btn btn-warning btn-xs" href="<%=request.getContextPath()%>/user/repositoryEditDocument.do?repositoryDocumentId={{node.id}}">
<span class="glyphicon glyphicon-pencil"></span>
</a>
</baco:hasRole>
</div>
<div id="repositoryFiles{{node.id}}" class="collapse">
<ol data-nodrag ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node" ng-class="{hidden: collapsed }">
<li >
<div data-nodrag class="tree-node tree-node-description tree-node-content clearfix">
<div ng-if="node.description">
<div class="col-md-2" style="text-align: right">
<span class="glyphicon glyphicon-tag"></span>
<span class="label label-primary">Descrição:</span>
</div>
<div class="col-md-10" style="border: 1px dashed black">
{{node.description}}
</div>
</div>
<div ng-if="node.internalIdentifier">
<div class="col-md-2" style="text-align: right">
<span class="glyphicon glyphicon-tag"></span>
<span class="label label-primary">ID INTERNO:</span>
</div>
<div class="col-md-10" style="border: 1px dashed black">
{{node.internalIdentifier}}
</div>
</div>
<div ng-if="node.publishDateStr">
<div class="col-md-2" style="text-align: right">
<span class="glyphicon glyphicon-tag"></span>
<span class="label label-primary">Data de Publicação:</span>
</div>
<div class="col-md-10" style="border: 1px dashed black">
{{node.publishDateStr}}
</div>
</div>
<div ng-if="node.closeDateStr">
<div class="col-md-2" style="text-align: right">
<span class="glyphicon glyphicon-tag"></span>
<span class="label label-primary">Data de Fim:</span>
</div>
<div class="col-md-10" style="border: 1px dashed black">
{{node.closeDateStr}}
</div>
</div>
<div ng-if="node.authorsJson" ng-repeat="autor in node.authorsJson.persons">
<div class="col-md-2" style="text-align: right">
<span class="glyphicon glyphicon-tag"></span>
<span class="label label-primary">Autor:</span>
</div>
<div class="col-md-10" style="border: 1px dashed black">
{{autor.firstNames}} {{autor.lastName}}
</div>
</div>
<div ng-if="node.contributorsJson" ng-repeat="autor in node.contributorsJson.persons">
<div class="col-md-2" style="text-align: right">
<span class="glyphicon glyphicon-tag"></span>
<span class="label label-primary">Colaborador:</span>
</div>
<div class="col-md-10" style="border: 1px dashed black">
{{autor.firstNames}} {{autor.lastName}}
</div>
</div>
<div ng-if="node.publisher">
<div class="col-md-2" style="text-align: right">
<span class="glyphicon glyphicon-tag"></span>
<span class="label label-primary">Entidade Publicadora:</span>
</div>
<div class="col-md-10" style="border: 1px dashed black">
{{node.publisher}}
</div>
</div>
</div>
</li>
<li ng-repeat="node in node.repositoryDocumentFiles" ui-tree-node ng-include="'files_renderer.html'">
</li>
</ol>
</div>
</script>
<script type="text/ng-template" id="files_renderer.html">
<!--Para nao deixar fazer drag-->
<div data-nodrag class="tree-node tree-node-file tree-node-content clearfix" ng-class="{modified: node.modified, nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved, bacoInvisible: !node.visible, hidden: hideNode(node)}">
<label data-toggle="tooltip" title="Este ficheiro está oculto!" ng-show="node.visible == false">
<span class="glyphicon glyphicon-ban-circle"/>
</label>
<div class="col-md-11">
<div ng-if="node.title">
<div class="col-md-2" style="text-align: right">
<span class="glyphicon glyphicon-tag"></span>
<span class="label label-primary">Titulo:</span>
</div>
<div class="col-md-10" style="border: 1px dashed black">
<i> {{node.title}} </i>
</div>
</div>
<div ng-if="node.description">
<div class="col-md-2" style="text-align: right">
<span class="glyphicon glyphicon-tag"></span>
<span class="label label-primary">Descrição:</span>
</div>
<div class="col-md-10" style="border: 1px dashed black">
<i>{{node.description}}</i>
</div>
</div>
<div class="col-md-12" style="margin-top: 4px">
<span class="glyphicon glyphicon-paperclip"></span>
<bacoTags:repositoryFile btnXs="true" transactional="false" staticTag="true" repositoryStream="{{node.repositoryFileProxy.repositoryStream}}" showHistory="true"/>
{{node.repositoryFileProxy.repositoryFile.lastVersion.name}}
({{node.repositoryFileProxy.repositoryFile.lastVersion.size / 1024 | number:0}} KB)
</div>
</div>
<div class="col-md-1">
<button data-toggle="tooltip" title="Ocultar ficheiro" ng-show="node.visible == true" class="btn btn-danger pull-right" type="button" ng-click="setDocumentFileInvisible(node)"><span class="glyphicon glyphicon-ban-circle"/></button>
<button data-toggle="tooltip" title="Repor ficheiro" ng-show="node.visible == false" class="btn btn-default pull-right" type="button" ng-click="setDocumentFileVisible(node)"><span class="glyphicon glyphicon-ok-circle"/></button>
<div ng-if="node.repositoryFileProxy.repositoryFile.accessControl == 'resource.access.publicDomain'">
Público
</div>
<div ng-if="node.repositoryFileProxy.repositoryFile.accessControl == 'resource.access.privateDomain'">
Privado
</div>
<div ng-if="node.repositoryFileProxy.repositoryFile.accessControl == 'resource.access.authenticatedDomain'">
Interno
</div>
</div>
</div>
</script>
<div class="panel panel-default">
<div class="panel-heading clearfix">
Administração de Coleções do Repositório de Documentos Digitais
<baco:hasRole role="admin,all,repositoryDocs">
<select class="chosenOff pull-right" type="text" ng-model="onlyVisibles" ng-options="o.v as o.n for o in [{ n: 'Ver Todos', v: false }, { n: 'Ocultar invisiveis', v: true }]">>
</select>
</baco:hasRole>
</div>
<div class="panel-body">
<div class="web-messages"></div>
<div class="row">
<div class="col-sm-12 form-horizontal">
<div ui-tree="treeOptions" id="page-content-root">
<ol ui-tree-nodes ng-model="data">
<li ng-repeat="node in data" ui-tree-node ng-include="'childs_renderer.html'"></li>
</ol>
</div>
</div>
</div>
<%-- <div class="col-sm-12">
<pre class="code">{{ data | json }}</pre>
</div>--%>
</div>
</div>
</div>
<%--AbstractDao.getCurrentSession().getTransaction().commit();--%>
</div>
Generated by GNU Enscript 1.6.5.2.