Cleaning up the code. Trying to find why code nodes are serialized so big! (problem was solved already for textual nodes)

This commit is contained in:
Offray Vladimir Luna Cárdenas 2016-03-14 22:12:14 +00:00
parent 25598642b3
commit 2cdb2f61a1
2 changed files with 82 additions and 271 deletions

View File

@ -87,38 +87,31 @@ GrafoscopioBrowser class >> configureSettings [
{ #category : #updating } { #category : #updating }
GrafoscopioBrowser class >> downloadTutorial [ GrafoscopioBrowser class >> downloadTutorial [
"I download the interactive tutorial in STON format. "I download the interactive tutorial in STON format.
I define some metadata associated to the tutorial document. If a the tutorial is already present in the system I made a temporal backup and download a new copy"
Language is provided according to the ISO 639-1 code convention."
| doc client | | client localTutorial temporalBackup remoteTutorial |
doc := Dictionary localTutorial := './', (self tutorialData at: 'relativePath'), (self tutorialData at: 'filename').
with: 'type' -> 'tutorial' temporalBackup := './', (self tutorialData at: 'relativePath'), 'tutorial.temp.ston'.
with: 'language' -> 'ES_CO' remoteTutorial := (self tutorialData at: 'remoteRepo'), 'doc/tip/', (self tutorialData at: 'relativePath'), (self tutorialData at: 'filename').
with: 'remote' -> 'http://mutabit.com/repos.fossil/grafoscopio/doc/tip/Docs/Es/Tutoriales/tutorial.ston' localTutorial asFileReference exists
with: 'local' -> './Docs/Es/Tutoriales/'.
((doc at: 'local'), 'tutorial.ston') asFileReference exists
ifTrue: [ ifTrue: [
((doc at: 'local'), 'tutorial.temp.ston') asFileReference exists temporalBackup asFileReference exists ifTrue: [ temporalBackup asFileReference delete].
ifTrue: [ ((doc at: 'local'), 'tutorial.temp.ston') asFileReference delete]. localTutorial asFileReference renameTo: 'tutorial.temp.ston'
((doc at: 'local'), 'tutorial.ston') asFileReference renameTo: 'tutorial.temp.ston'
]. ].
[: bar | [: bar |
bar title: 'Actualizando el tutorial...'. bar title: 'Actualizando el tutorial...'.
[client := ZnClient new. [client := ZnClient new.
client client
get: (doc at: 'remote'); get: remoteTutorial;
signalProgress: true; signalProgress: true;
downloadTo: (doc at: 'local'). downloadTo: ('./', (self tutorialData at: 'relativePath')). ]
]
on: HTTPProgress on: HTTPProgress
do: [ :progress | do: [ :progress |
progress isEmpty ifFalse: [ bar current: progress percentage ]. progress isEmpty ifFalse: [ bar current: progress percentage ].
progress resume ]. progress resume ].
] asJob run. ] asJob run.
client isSuccess
ifFalse: [ self inform: 'Algo salió mal. Verifique su conexión a Internet.' ]
] ]
{ #category : #'graphical interface' } { #category : #'graphical interface' }
@ -267,11 +260,11 @@ GrafoscopioBrowser class >> startDockingBar [
launchMenu := MenuMorph new. launchMenu := MenuMorph new.
launchMenu launchMenu
add: 'Documento interactivo nuevo' target: GrafoscopioBrowser selector: #open; add: 'Cuaderno nuevo' target: GrafoscopioBrowser selector: #open;
add: 'Documento interactivo desde archivo' target: (GrafoscopioBrowser new) selector: #openFromFileSelector; add: 'Cuaderno desde archivo...' target: (GrafoscopioBrowser new) selector: #openFromFileSelector;
add: 'Documento interactivo desde Internet' target: (GrafoscopioBrowser new) selector: #openFromUrlUI; add: 'Cuaderno desde Internet...' target: (GrafoscopioBrowser new) selector: #openFromUrlUI;
add: 'Documentos interactivos recientes' target: GrafoscopioBrowser selector: #openFromRecentlyUsed; add: 'Cuadernos recientes...' target: GrafoscopioBrowser selector: #openFromRecentlyUsed;
add: 'Documentos interactivos de ejemplo' target: GrafoscopioBrowser selector: #messageNotImplementedYet; add: 'Cuadernos de ejemplo' target: GrafoscopioBrowser selector: #messageNotImplementedYet;
add: 'Ejemplos de visualizaciones en Roassal' target: (RTExampleBrowser new) selector: #open; add: 'Ejemplos de visualizaciones en Roassal' target: (RTExampleBrowser new) selector: #open;
add: 'Playground' target: (Smalltalk tools) selector: #openWorkspace; add: 'Playground' target: (Smalltalk tools) selector: #openWorkspace;
add: 'Transcript' target: (Smalltalk tools) selector: #openTranscript. add: 'Transcript' target: (Smalltalk tools) selector: #openTranscript.
@ -307,6 +300,39 @@ GrafoscopioBrowser class >> startDockingBar [
openInWorld. openInWorld.
] ]
{ #category : #updating }
GrafoscopioBrowser class >> tutorialData [
"I define some metadata associated to the tutorial document.
Language is provided according to the ISO 639-1 code convention."
| docData |
docData := Dictionary
with: 'type' -> 'tutorial'
with: 'languageCode' -> 'ES_CO'
with: 'remoteRepo' -> 'http://mutabit.com/repos.fossil/grafoscopio/'
with: 'relativePath' -> 'Docs/Es/Tutoriales/'
with: 'filename' -> 'tutorial.ston'.
^ docData
]
{ #category : #updating }
GrafoscopioBrowser class >> tutorialIsUpdated [
"I compare the cryptografic signatures of the local copy of the tutorial and the remote one to see if the're the same,
in which case I return True or False in any other cases."
| folderLastContents lastRemoteTutorial localTutorial |
localTutorial := './', (GrafoscopioBrowser tutorialData at: 'relativePath'), (GrafoscopioBrowser tutorialData at: 'filename').
folderLastContents := NeoJSONReader fromString:
(ZnEasy get: (self tutorialData at: 'remoteRepo'), 'json/dir?ci=tip&name=', (self tutorialData at: 'relativePath')) contents.
lastRemoteTutorial := ((folderLastContents at: 'payload') at: 'entries')
detect: [:entry | (entry at: 'name') = (self tutorialData at: 'filename') ].
^ (lastRemoteTutorial at: 'uuid') = (SHA1 new hashMessage: (localTutorial asFileReference contents)) hex
]
{ #category : #updating } { #category : #updating }
GrafoscopioBrowser class >> updateDataviz [ GrafoscopioBrowser class >> updateDataviz [
"Updates Dataviz package with new versions of itself take from the source code repository and "Updates Dataviz package with new versions of itself take from the source code repository and
@ -369,39 +395,6 @@ GrafoscopioBrowser class >> updateDocumentation [
]. ].
] ]
{ #category : #updating }
GrafoscopioBrowser class >> updateDocumentationTemp [
"Updates documentation (manual, tutorials) from official repository"
| update filePath fileLocation client docs |
update := (UIManager default
confirm: '¿Desea actualizar la documentación?'
label: 'Actualizar documentación').
update
ifTrue: [
docs := Dictionary
with: 'tutorial' -> (Dictionary
with: 'remote' -> 'http://mutabit.com/repos.fossil/grafoscopio/doc/tip/Docs/Es/Tutoriales/tutorial.ston'
with: 'local' -> './Docs/Es/Tutoriales/'
).
docs do: [:each |
client := ZnClient new.
client get: (each at: 'remote').
client isSuccess
ifFalse: [ self inform: 'Algo salió mal. Verifique su conexión a Internet.' ]
ifTrue: [
filePath := each at: 'local'.
filePath asFileReference ensureCreateDirectory.
fileLocation := filePath, ((each at: 'remote') splitOn: '/') last.
fileLocation asFileReference
writeStreamDo: [:stream |
stream write: client contents utf8Decoded asString].
].
self inform: 'Actualización de la documentación terminada'.
]
].
]
{ #category : #updating } { #category : #updating }
GrafoscopioBrowser class >> updateGrafoscopio [ GrafoscopioBrowser class >> updateGrafoscopio [
"Updates Grafoscopio with new versions of itself take from the source code repository and "Updates Grafoscopio with new versions of itself take from the source code repository and
@ -549,12 +542,20 @@ GrafoscopioBrowser class >> updateSystem [
GrafoscopioBrowser class >> updateTutorial [ GrafoscopioBrowser class >> updateTutorial [
"I Update main tutorial from official repository" "I Update main tutorial from official repository"
| update | | update unnecessaryUpdate |
update := (UIManager default update := UIManager default
confirm: '¿Desea actualizar el tutorial?' confirm: '¿Desea actualizar el tutorial?'
label: 'Actualizar el tutorial'). label: 'Actualizar el tutorial'.
update update
ifTrue: [self downloadTutorial] ifTrue: [
self tutorialIsUpdated
ifFalse: [self downloadTutorial]
ifTrue: [
unnecessaryUpdate := UIManager default
abort: 'El tutorial ya se encuentra en su versión más reciente.'
title: 'Nada que actualizar!'
]
]
] ]
{ #category : #updating } { #category : #updating }
@ -614,29 +615,6 @@ GrafoscopioBrowser >> addToTagsAvailable [
] ]
{ #category : #'graphical interface' }
GrafoscopioBrowser >> body2ForTransmediaIn: constructor for: aNode [
"Shows the body of a transmedia type of nodes, which are tagged as 'original' and 'transmediado'"
| innerBrowser originalNode transmediaNode |
aNode tags = 'original'
ifFalse: [^self ]
ifTrue: [
innerBrowser := GLMTabulator new.
GLMTabulator new.
innerBrowser
column: [ :c |
c row: [ :r | r column: #original; column: #transmediado] span: 7";
row: #buttons; span: 1"].
originalNode := aNode.
originalNode children isNotNil
ifTrue: [transmediaNode := originalNode children detect: [:node | node tags = 'transmediado']
ifNone: [ transmediaNode := nil ] ].
constructor custom: innerBrowser]
]
{ #category : #'graphical interface' } { #category : #'graphical interface' }
GrafoscopioBrowser >> bodyForCodeIn: constructor for: aNode [ GrafoscopioBrowser >> bodyForCodeIn: constructor for: aNode [
"Shows the body of a node as an interactive playground. If node is not tagged it will return itself, "Shows the body of a node as an interactive playground. If node is not tagged it will return itself,
@ -652,24 +630,6 @@ GrafoscopioBrowser >> bodyForCodeIn: constructor for: aNode [
] ]
{ #category : #'graphical interface' }
GrafoscopioBrowser >> bodyForTransmediaIn: constructor for: aNode [
"Shows the body of a transmedia type of nodes, which are tagged as 'original' and 'transmediado'"
aNode tags = 'original'
ifFalse: [^self ]
ifTrue: [constructor custom: (self panelTransmediaFor: aNode)]
]
{ #category : #'graphical interface' }
GrafoscopioBrowser >> bodyForTransmediaOn: constructor [
"Shows the body of a transmedia type of node"
constructor custom: self panelBrowserForTransmediaton.
]
{ #category : #'graphical interface' } { #category : #'graphical interface' }
GrafoscopioBrowser >> bodyIn: constructor [ GrafoscopioBrowser >> bodyIn: constructor [
"Shows the body of a selected node" "Shows the body of a selected node"
@ -689,7 +649,7 @@ GrafoscopioBrowser >> bodyIn: constructor for: aNode [
| specialTags | | specialTags |
specialTags := #('código' 'original'). specialTags := #('código').
(specialTags includes: aNode tags) (specialTags includes: aNode tags)
ifTrue: [^self ]. ifTrue: [^self ].
(constructor text) (constructor text)
@ -732,7 +692,7 @@ browser
(browser transmit) (browser transmit)
to: #nodeBody; to: #nodeBody;
from: #tree; from: #tree;
andShow: [ :a | self bodyIn: a]. andShow: [ :a | self bodyIn: a asString].
(browser transmit ) (browser transmit )
from: #tree port: #selection; from: #tree port: #selection;
from: #nodeBody port: #text; from: #nodeBody port: #text;
@ -796,8 +756,7 @@ browser
when: [:selection | selection notNil]; when: [:selection | selection notNil];
andShow: [ :a :node | andShow: [ :a :node |
self bodyIn: a for: node. self bodyIn: a for: node.
self bodyForCodeIn: a for: node. self bodyForCodeIn: a for: node].
self bodyForTransmediaIn: a for: node ].
(browser transmit ) (browser transmit )
from: #tree port: #selection; from: #tree port: #selection;
from: #nodeBody port: #text; from: #nodeBody port: #text;
@ -806,7 +765,7 @@ browser
transformed: [:node :content | transformed: [:node :content |
node tags = 'código' node tags = 'código'
ifFalse: [node body: content asString] ifFalse: [node body: content asString]
ifTrue: [node body: content]]. ifTrue: [node body: content asString]].
(browser transmit) (browser transmit)
from: #tree; from: #tree;
to: #nodeHeader; to: #nodeHeader;
@ -819,57 +778,6 @@ browser
transformed: [:node :text | node header: text asString] transformed: [:node :text | node header: text asString]
] ]
{ #category : #'graphical interface' }
GrafoscopioBrowser >> buildBrowserNamed: aName inMode: aModeName [
"Main method for building the interface for trees and its nodes. The name of the browser corresponds to the name of the file
where tree is stored (or is named 'draft.ston' by default). The name of the mode correspond to a way of showing and dealing with
the data.
The idea is to support several modes in the future, starting with the 'Transmediaton' mode and adding more as needed."
self configureInitialTags.
browser := GLMTabulator new
title: aName, ' | Grafoscopio'.
browser
column: [:c |
c row: #tree span: 6;
row: #nodeHeader span: 1] span: 2;
column: [ :c |
c row: #nodeBody span: 2] span: 5.
browser
updateOn: GLMItemAdded from: #yourself;
updateOn: GLMItemRemoved from: #yourself.
(browser transmit)
to: #tree;
andShow: [:a | self treeOn: a].
"Creating a self updatable body pane"
(browser transmit)
to: #nodeBody;
from: #tree;
andShow: [ :a |
(aModeName = 'transmedia')
ifTrue: [self bodyForTransmediaOn: a]].
(browser transmit )
from: #tree port: #selection;
from: #nodeBody port: #text;
when: [:node :text | text notNil];
to: #nodeBody port: #neverland;
transformed: [:node :text | node body: text asString].
(browser transmit)
from: #tree;
to: #nodeHeader;
andShow: [ :h | self headerOn: h ].
(browser transmit )
from: #tree port: #selection;
from: #nodeHeader port: #text;
when: [:node :text | text notNil];
to: #nodeHeader port: #neverland1;
transformed: [:node :text | node header: text asString]
]
{ #category : #'persistance / repositories' } { #category : #'persistance / repositories' }
GrafoscopioBrowser >> commitToRepository [ GrafoscopioBrowser >> commitToRepository [
"Commits to the associated repository for the current document tree. "Commits to the associated repository for the current document tree.
@ -1137,24 +1045,6 @@ GrafoscopioBrowser >> openFromFile: aFileName [
browser openOn: mainTree children. browser openOn: mainTree children.
] ]
{ #category : #persistence }
GrafoscopioBrowser >> openFromFile: aFileName inMode: aModeName [
"Opens a tree from a file named aFileName"
| currentChildren |
GrafoscopioBrowser configureSettings.
aFileName isNil ifTrue: [ ^nil ].
workingFile := aFileName name asFileReference.
currentChildren := (STON fromString: aFileName contents).
self buildBrowserNamed: aFileName basenameWithIndicator inMode: aModeName.
mainTree := GrafoscopioNode new
header: 'Arbol principal';
level: 0.
mainTree children: currentChildren.
browser openOn: mainTree children.
]
{ #category : #persistence } { #category : #persistence }
GrafoscopioBrowser >> openFromFileSelector [ GrafoscopioBrowser >> openFromFileSelector [
"Opens a tree from a file by using the file selector GUI." "Opens a tree from a file by using the file selector GUI."
@ -1238,21 +1128,6 @@ GrafoscopioBrowser >> openLandscape [
] ]
{ #category : #persistence }
GrafoscopioBrowser >> openLast [
"Opens a new browser with a fixed 'last' working tree. May be this should be changed"
| workingFile currentChildren| "workingChildren would sound too cruel!"
self buildBrowser.
workingFile := '/home/offray/Documentos/U/Libertadores/Grafoscopio/bootstrapping-objeto-investigacion.ston' asFileReference readStream.
currentChildren := (STON fromStream: workingFile).
mainTree := GrafoscopioNode new
header: 'Bootstrapping the research object';
level: 0.
mainTree children: currentChildren.
browser openOn: mainTree children.
]
{ #category : #persistence } { #category : #persistence }
GrafoscopioBrowser >> openTutorialInGrafoscopio [ GrafoscopioBrowser >> openTutorialInGrafoscopio [
"Opens the help tree from a file" "Opens the help tree from a file"
@ -1269,15 +1144,6 @@ GrafoscopioBrowser >> openTutorialInGrafoscopio [
browser openOn: mainTree children. browser openOn: mainTree children.
] ]
{ #category : #persistence }
GrafoscopioBrowser >> openWorking [
"Opens a new browser with the last working tree"
self buildBrowser.
mainTree := '/home/offray/Documentos/U/Libertadores/Grafoscopio/bootstrapping-objeto-investigacion.ston' asFileReference readStream.
browser openOn: mainTree children.
]
{ #category : #'graphical interface' } { #category : #'graphical interface' }
GrafoscopioBrowser >> panelAsCodeFor: aNode [ GrafoscopioBrowser >> panelAsCodeFor: aNode [
"Shows an interactive playground for Smalltalk code in a node body" "Shows an interactive playground for Smalltalk code in a node body"
@ -1287,9 +1153,9 @@ GrafoscopioBrowser >> panelAsCodeFor: aNode [
browser column: #code. browser column: #code.
browser transmit browser transmit
to: #code; to: #code;
transformed: [ GTPlayPage new content: aNode body ]; transformed: [ GTPlayPage new content: aNode body asString];
andShow: [ :a | a custom: GTPlayground new ]. andShow: [ :a | a custom: GTPlayground new ].
browser sendToOutside: #nodeBody from: #code -> #text. browser sendToOutside: (#nodeBody asString) from: #code -> #text.
^ browser. ^ browser.
] ]

View File

@ -85,7 +85,7 @@ GrafoscopioNode >> addNodeAfter [
{ #category : #accessing } { #category : #accessing }
GrafoscopioNode >> ancestors [ GrafoscopioNode >> ancestors [
"Returns a collection of all the nodes wich are ancestors of the receiver node" "I return a collection of all the nodes wich are ancestors of the receiver node"
| currentNode ancestors | | currentNode ancestors |
currentNode := self. currentNode := self.
@ -102,8 +102,9 @@ GrafoscopioNode >> ancestors [
{ #category : #accessing } { #category : #accessing }
GrafoscopioNode >> ancestorsHeaders [ GrafoscopioNode >> ancestorsHeaders [
"Returns the headers of all the ancestors of the node. Maybe this and 'headers' should be integrated, so both act on a collection of "Returns the headers of all the ancestors of the node.
children instead of having two separate methods" Maybe this and 'headers' should be integrated, so both act on a collection of children instead of
having two separate methods"
| currentNode ancestors | | currentNode ancestors |
currentNode := self. currentNode := self.
@ -146,43 +147,31 @@ GrafoscopioNode >> asSton [
{ #category : #initialization } { #category : #initialization }
GrafoscopioNode >> becomeDefaultTestTree [ GrafoscopioNode >> becomeDefaultTestTree [
| node1 node2 node3 | | node1 node2 |
self level: 0. self level: 0.
self header: 'Arbol principal'. self header: 'Arbol principal'.
node1 := GrafoscopioNode new node1 := GrafoscopioNode new
header: 'Nodo 1'; header: 'Markup';
body: 'Texto 1'. body: 'I am just a node with markup'.
node2 := GrafoscopioNode new node2 := GrafoscopioNode new
header: 'Nodo 2'; header: 'Code';
body: 'Texto 2'. body: 'PharoTutorial openPharoZenWorkspace';
node3 := GrafoscopioNode new
header: 'Nodo 3';
body: 'ProfStef openPharoZenWorkspace';
tagAs: 'código'. tagAs: 'código'.
self self
addNode: node1; addNode: node1;
addNode: node2. addNode: node2.
node2 addNode: node3.
] ]
{ #category : #initialization } { #category : #initialization }
GrafoscopioNode >> becomeDefaultTree [ GrafoscopioNode >> becomeDefaultTree [
| node1 node2 node3 | "I create a starting tree for all grafoscopio notebooks with just one textual node"
| node1 |
self level: 0. self level: 0.
self header: 'Arbol principal'. self header: 'Arbol principal'.
node1 := GrafoscopioNode node1 := GrafoscopioNode
header: 'Nodo 1' header: 'Nodo 1'
body: 'Texto 1'. body: 'Texto 1'.
node2 := GrafoscopioNode self addNode: node1.
header: 'Nodo 2'
body: 'Texto 2'.
node3 := GrafoscopioNode
header: 'Nodo 3'
body: 'Texto 3'.
self
addNode: node1;
addNode: node2.
node2 addNode: node3.
] ]
{ #category : #accessing } { #category : #accessing }
@ -343,16 +332,6 @@ GrafoscopioNode >> level: anInteger [
level := anInteger level := anInteger
] ]
{ #category : #accessing }
GrafoscopioNode >> localRepository [
^ localRepository
]
{ #category : #accessing }
GrafoscopioNode >> localRepository: anObject [
localRepository := anObject
]
{ #category : #exporting } { #category : #exporting }
GrafoscopioNode >> markdownContent [ GrafoscopioNode >> markdownContent [
"Extracts the markdown of a node using body as content, header as title and level as hierarchical level of the title. "Extracts the markdown of a node using body as content, header as title and level as hierarchical level of the title.
@ -530,40 +509,6 @@ GrafoscopioNode >> removeNode: aNode [
] ]
{ #category : #exporting }
GrafoscopioNode >> returnConfig [
"Detects a children node containing the configuration for the creation of the output files. If nothing is detected,
creates defaults for that. Pending:
- Verifying that file data in config node is accurate, and if not create the proper locations.
- Maybe there is a need to consider if it should run on all the tree, instead of a particular node."
| configString configNode configDict |
configNode := (self children) detect: [:nodeContent | nodeContent header = 'Config' ] ifNone: [ nil ].
"This part always enter for the nil option! MUST BE CORRECTED"
configNode isNil
ifTrue: [
configString := '{
"title": "Boostrapping para el objeto de investigación",
"author": {
"given": "Offray Vladimir",
"family": "Luna Cárdenas"
},
"file": {
"relative-path" : "U/Libertadores/Grafoscopio/",
"name": "bootstrapping-objeto-investigacion",
"formats": [
#ston,
#markdown
]
}
}'
]
ifFalse: [ configString := configNode body ].
configDict := STON fromString: configString.
^configDict
]
{ #category : #accessing } { #category : #accessing }
GrafoscopioNode >> saveContent: anObject [ GrafoscopioNode >> saveContent: anObject [
"Sets the receivers body to the given object" "Sets the receivers body to the given object"
@ -577,8 +522,8 @@ GrafoscopioNode >> tagAs: aTag [
know if a tag excludes others from the same node" know if a tag excludes others from the same node"
tags := aTag. tags := aTag.
aTag = 'código' "aTag = 'código'
ifTrue: [self body: (GTPlayPage new content: self body) content] ifTrue: [self body: (GTPlayPage new content: self body) content]"
] ]
{ #category : #accessing } { #category : #accessing }