source: publico/SDE/trunk/StrDocDef.py @ 802

Última Alteração nesse arquivo desde 802 foi 802, incluída por ciciliati, 14 anos atrás

Importação inicial do SDE (Structured Document Editor), versão 0.0.2, distribuída com o SAPL 2.0.2 .

File size: 7.2 KB
Linha 
1# -*- coding: iso-8859-1 -*-
2
3"""
4from OFS.SimpleItem import SimpleItem
5from Globals import Persistent
6from Acquisition import Implicit
7"""
8from OFS.OrderedFolder import OrderedFolder
9from Products.ZCatalog.CatalogAwareness import CatalogAware
10from OFS.ObjectManager import ObjectManager
11from OFS.PropertyManager import PropertyManager
12import string
13
14def StrDocDef_addForm(self, REQUEST):
15    "HTML para adicionar um novo objeto StrDocDef"
16    return """
17<HTML>
18<HEAD><TITLE>Add StructuredDocumentDefinition</TITLE></HEAD>
19<BODY BGCOLOR="#FFFFFF" LINK="#000099" VLINK="#555555">
20<H2>Add StructuredDocumentDefinition</H2>
21<form action="StrDocDef_add"><table>
22<tr><th>Id</th>
23    <td><input type=text name=id></td>
24</tr>
25<tr><th>XML Namespace Prefix</th>
26    <td><input type=text name=xmlns_prefix></td>
27</tr>
28<tr><td></td><td><input type=submit value=" Add "></td></tr>
29</table></form>
30</body></html>
31"""
32
33def StrDocDef_add(self,REQUEST):
34    "Método para adicionar um objeto StrDocDef"
35    instance = StrDocDef(REQUEST)
36    instance.reindex_object()
37    self._setObject(REQUEST.id,instance)
38    instance=getattr(self.this(),REQUEST.id)
39    instance.manage_editProperties(REQUEST)
40    REQUEST.RESPONSE.redirect(instance.aq_parent.absolute_url() + '/manage_main')
41    #   return instance
42
43class StrDocDef(OrderedFolder,CatalogAware,ObjectManager,PropertyManager):
44    "Classe de definição (modelo) de documentos estruturados"
45    meta_type = 'StructuredDocumentDefinition'
46    filtered_meta_types = []
47    __tEmPtYPe = {'product': 'StructuredDoc', 'name': 'StrDocElementDefinition', 'permission': 'Add StrDocElementDefinitions', 'interfaces': [], 'visibility': 'Global', 'instance': None, 'action': 'manage_addProduct/StructuredDoc/StrDocElemDef_addForm', 'container_filter': None}
48    filtered_meta_types.append(__tEmPtYPe)
49
50
51    def __init__(self,REQUEST):
52        self.id = REQUEST.id
53        self._setProperty("xmlns_prefix",'')
54        self._setProperty("xml_tag",'')
55        self._setProperty("default_xslt_for_html",'')
56        self._setProperty("default_xslt_for_editor",'')
57
58    # *** getDefElement
59    def getDefElement(self,subtree,obj=''):
60        if obj:
61            self=obj
62        if subtree == []:
63            return self
64        else:
65            child_id = subtree.pop(0)
66            child = self.restrictedTraverse(child_id)
67            if child.meta_type == "StrDocElemDefLink":
68                child = child.restrictedTraverse(child.link_to)
69            return child.getDefElement(subtree=subtree,obj=child)
70
71    # *** possibleChild
72    def possibleChild(self,obj=''):
73        if obj:
74            self=obj
75        chd=[]
76        pos=0
77        for x in self.objectValues(['StrDocElementDefinition','StrDocElemDefLink']):
78            elm=[]
79            elm.append (x.id)
80            elm.append (x.isOptional())
81            elm.append (x.isMultiple())
82            elm.append (pos)
83            elm.append (x.exclusivity_group)
84            elm.append (x.name())
85            chd.append (elm)
86            pos = pos + 1
87        return chd
88
89    # *** renderXSD   ACHO QUE NÃO DEVE MAIS SER UTLIZADA.
90    def renderXSD(self,indent=""):
91        group_open = -1
92        tag = self.xmlTag()
93        shift = "   "
94        printed=""
95        printed+= "%s<?xml version=\"1.0\" ?>" % indent
96        printed+= "%s<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"" % indent
97        printed+= "%s           targetNamespace=\"http://servidor1.interlegis.gov.br/XSD/%s\"" % (indent,self.id)  # A URL DO SERVIDOR DEVERIA SER PARAMETRIZADA!!!
98        printed+= "%s           xmlns=\"http://servidor1.interlegis.gov.br/XSD/%s\"" % (indent,self.id)
99        printed+= "%s           elementFormDefault=\"qualified\">" % indent
100        printed+= "%s   <xs:element name=\"%s\">" % (indent,tag)
101        printed+= "%s      <xs:complexType>" % indent
102        printed+= "%s         <xs:sequence>" % indent
103
104        subtree = self.objectValues(["StrDocElementDefinition","StrDocElemDefLink"])
105        if len(subtree) > 0:
106            for x in subtree:
107                if x.exclusivity_group != group_open:
108                    if group_open != -1:
109                        printed+= "%s            </xs:choice>" % indent
110                    printed+= "%s            <xs:choice>" % indent
111                    group_open = x.exclusivity_group
112                    shift = shift + shift
113                printed+= x.renderXSD(indent + "         " + shift)
114            if group_open != -1:
115                printed+= "%s            </xs:choice>" % indent
116                group_open = -1
117        printed+= "%s         </xs:sequence>" % indent
118        printed+= "%s      </xs:complexType>" % indent
119        printed+= "%s   </xs:element>" % indent
120        printed+= "%s</xs:schema>" % indent
121        return printed
122
123    # *** renderXSDv
124    def renderXSDv(self,indent=""):
125        tag = self.xmlTag()
126        group_open = -1
127        shift = "   "
128        printed=""
129        printed+= "%s<?xml version=\"1.0\" ?>\n" % indent
130        printed+= "%s<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\n" % indent
131        printed+= "%s           targetNamespace=\"/XSD/%s\"\n" % (indent,self.id)
132        printed+= "%s           xmlns=\"/XSD/%s\"\n" % (indent,self.id)
133        printed+= "%s           elementFormDefault=\"qualified\">\n" % indent
134        printed+= "%s   <xs:element name=\"%s\">\n" % (indent,tag)
135        printed+= "%s      <xs:complexType>\n" % indent
136        printed+= "%s         <xs:sequence>\n" % indent
137
138        subtree = self.objectValues(["StrDocElementDefinition","StrDocElemDefLink"])
139
140        if len(subtree) > 0:
141            for x in subtree:
142                if x.exclusivity_group != group_open:
143                    if group_open != -1:
144                        printed+= "%s            </xs:choice>\n" % indent
145                        shift = shift[0:-3]
146                    printed+= "%s            <xs:choice>\n" % indent
147                    group_open = x.exclusivity_group
148                    shift = shift + "   "
149                if x.isOptional():
150                    minOccurs = "0"
151                else:
152                    minOccurs = "1"
153                if x.isMultiple():
154                    maxOccurs = "unbounded"
155                else:
156                    maxOccurs = "1"
157                tag_x = x.xmlTag()
158                printed+= "%s         <xs:element name=\"%s\" type=\"%sType\" minOccurs=\"%s\" maxOccurs=\"%s\"/>\n" % (indent+shift,tag_x,tag_x,minOccurs,maxOccurs)
159            if group_open != -1:
160                printed+= "%s            </xs:choice>\n" % indent
161                group_open = -1
162                shift = shift[0:-3]
163        printed+= "%s         </xs:sequence>\n" % indent
164        printed+= "%s         <xs:attribute name=\"id\" type=\"xs:string\" />\n" % indent
165        printed+= "%s      </xs:complexType>\n" % indent
166        printed+= "%s   </xs:element>\n" % indent
167
168        subtree = self.objectValues("StrDocElementDefinition")
169        for x in subtree:
170            printed+= x.renderXSDv(indent+"   ")
171        printed+= "%s</xs:schema>\n" % indent
172        self.REQUEST.RESPONSE.setHeader('Content-type', 'text/xml')
173        return printed
174
175    # *** xmlTag
176    def xmlTag(self):
177        if self.xml_tag == "":
178            return string.lower(self.id)
179        else:
180            return self.xml_tag
Note: Veja TracBrowser para ajuda no uso do navegador do trac.
 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.