Skip to content

Commit

Permalink
Added pop for data details
Browse files Browse the repository at this point in the history
  • Loading branch information
jhicks committed Mar 16, 2010
1 parent f39d250 commit f1df8b0
Show file tree
Hide file tree
Showing 11 changed files with 255 additions and 54 deletions.
Expand Up @@ -42,7 +42,9 @@ class ChannelController {
}

def show = {
def channelInstance = org.jumpmind.symmetric.grails.Channel.get(params.id)
session.menu="control-channels"

def channelInstance = org.jumpmind.symmetric.grails.Channel.get(params.id)
if (!channelInstance) {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'channel.label', default: 'Channel'), params.id])}"
redirect(action: "list")
Expand Down
Expand Up @@ -8,14 +8,16 @@ import org.jumpmind.symmetric.model.DataEventType;
import org.jumpmind.symmetric.model.TriggerReBuildReason;

class Data implements Serializable {
static transients = [ 'triggerHistory', 'eventType']
static transients = [ 'triggerHistory', 'eventType', 'htmlRowData', 'htmlOldData']
static hasMany = [ dataEvents : DataEvent ]
TriggerHistory triggerHist
String strEventType

private @Delegate org.jumpmind.symmetric.model.Data delegate = new org.jumpmind.symmetric.model.Data()

static mapping = {
triggerHist ignoreNotFound:true

def config = ConfigurationHolder.config
table config.symmetric.sync.table.prefix + '_data'
version false
Expand All @@ -32,4 +34,30 @@ class Data implements Serializable {
public DataEventType getEventType() {
return DataEventType.getEventType(strEventType)
}

public String getHtmlRowData() {
StringBuffer html = new StringBuffer()
html.append("\n<div class='data-row-data'>")
def columns = toParsedRowData()
columns.each {
html.append("\n\t<div class='data-row-data-field'>").append(it).append("</div>")

}
html.append("\n\t<div class='clearie' >&nbsp;</div>")
html.append("\n</div>")

}

public String getHtmlOldData() {
StringBuffer html = new StringBuffer()
html.append("\n<div class='data-old-data'>")
def columns = toParsedOldData()
columns.each {
html.append("\n\t<div class='data-old-data-field'>").append(it).append("</div>")

}
html.append("\n\t<div class='clearie' >&nbsp;</div>")
html.append("\n</div>")

}
}
Expand Up @@ -4,7 +4,7 @@ import org.codehaus.groovy.grails.commons.ConfigurationHolder
import org.jumpmind.symmetric.model.TriggerReBuildReason

class TriggerHistory implements Serializable {
static transients = [ 'parsedColumnNames', 'parsedPkColumnNames', 'triggerHistoryId', 'lastTriggerBuildReason']
static transients = [ 'parsedColumnNames', 'parsedPkColumnNames', 'triggerHistoryId', 'lastTriggerBuildReason', 'htmlColumnNames']
String strLastTriggerBuildReason

private @Delegate org.jumpmind.symmetric.model.TriggerHistory delegate = new org.jumpmind.symmetric.model.TriggerHistory()
Expand Down Expand Up @@ -47,6 +47,19 @@ class TriggerHistory implements Serializable {
return html.toString()
}

public String getHtmlColumnNames() {
StringBuffer html = new StringBuffer()
html.append("\n<div class='trigger-history-column-names'>")
def columns = columnNames.split(",")
columns.each {
html.append("\n\t<div class='trigger-history-column-name'>").append(it).append("</div>")

}
html.append("\n\t<div class='clearie' >&nbsp;</div>")
html.append("\n</div>")

}

public TriggerReBuildReason getLastTriggerBuildReason() {
return TriggerReBuildReason.fromCode(strLastTriggerBuildReason)
}
Expand Down
2 changes: 2 additions & 0 deletions grails/symmetricds/grails-app/views/common/_listMenu.gsp
@@ -1,7 +1,9 @@
<div class="listmenu">
<!--
<ul class="navaction" id="navaction_list">
<li class="navitem">
<g:link class="navcreate" action="create"><g:message code="new.label" default="New"/></g:link>
</li>
</ul>
-->
</div>
2 changes: 1 addition & 1 deletion grails/symmetricds/grails-app/views/common/_overview.gsp
Expand Up @@ -4,7 +4,7 @@
<span class="value"><g:link controller="node" action="show" id="${session.overview?.nodeId}">${session.overview?.nodeId}</g:link></span>
</span>
<span class="meta">
<span class="label"><g:message code="symmetric.status.label" default="Status"/></span>
<span class="label"><g:message code="symmetric.status.label" default="Heartbeat"/></span>
<span class="value"><g:if test="${session.overview?.started}">
<g:message code="symmetric.running.label" default="Running"/>
</g:if>
Expand Down
87 changes: 52 additions & 35 deletions grails/symmetricds/grails-app/views/data/show.gsp
Expand Up @@ -15,7 +15,7 @@
<div class="message">${flash.message}</div>
</g:if>
<div class="dialog">
<table>
<table width="100%">
<tbody>

<tr class="prop">
Expand Down Expand Up @@ -59,19 +59,56 @@
<td valign="top" class="value">${fieldValue(bean: dataInstance, field: "sourceNodeId")}</td>

</tr>

<tr class="prop">
<td valign="top" class="name"><g:message code="data.rowData.label" default="Row Data" /></td>

<td valign="top" class="value">${fieldValue(bean: dataInstance, field: "rowData")}</td>

</tr>

<tr class="prop">
<td valign="top" class="name"><g:message code="data.oldData.label" default="Old Data" /></td>

<td valign="top" class="value">${fieldValue(bean: dataInstance, field: "oldData")}</td>

<td valign="top" class="name"><g:message code="data.data.label" default="Data" /></td>

<td valign="top" class="value">
<div class="data-panel">
<table>
<%
columns = dataInstance.triggerHist?.columnNames.split(",")
old = dataInstance.toParsedOldData()
rows = dataInstance.toParsedRowData()
pk = dataInstance.toParsedPkData()
%>
<tr>
<td colspan="${columns?.size()}" class="data-table-name">${dataInstance.tableName}&nbsp;(${dataInstance.eventType?.encodeAsHTML()})</span></td>
</tr>
<tr class="data-table-columns">
<td class="data-column">&nbsp;</td>
<g:each in="${columns}" var="c" status="i">
<td class="data-coulumn${(i % 2) == 0 ? ' alt' : ''}">${c}</td>
</g:each>
</tr><tr>
<td class="data-column">PK</td>

<%pkCounter = 0%>
<g:each in="${pk}" var="p" status="i">
<%pkCounter = i%>
<td class="data-coulumn${(i % 2) == 0 ? ' alt' : ''}">${p}</td>
</g:each>
<%pkLength = pk != null ? pk.length : 0%>
<g:while test="${pkLength < columns.length}">
<%pkLength++
pkCounter++%>
<td class="data-coulumn${(pkCounter % 2) == 0 ? ' alt' : ''}">&nbsp;</td>
</g:while>
</tr><tr>
<td class="data-column">New</td>
<g:each in="${rows}" var="r" status="i">
<td class="data-coulumn${(i % 2) == 0 ? ' alt' : ''}${old == null || rows[i] != old[i] ? ' diff' : ''}">${r}</td>
</g:each>
</tr><tr>
<td class="data-column">Old</td>
<g:each in="${old}" var="o" status="i">
<td class="data-coulumn${(i % 2) == 0 ? ' alt' : ''}">${o}</td>
</g:each>
</tr>
</table>
</div>

</td>
</tr>

<tr class="prop">
Expand All @@ -80,29 +117,9 @@
<td valign="top" class="value">${fieldValue(bean: dataInstance, field: "externalData")}</td>

</tr>


<tr class="prop">
<td valign="top" class="name"><g:message code="data.tableName.label" default="Table Name" /></td>

<td valign="top" class="value">${fieldValue(bean: dataInstance, field: "tableName")}</td>

</tr>

<tr class="prop">
<td valign="top" class="name"><g:message code="data.pkData.label" default="Pk Data" /></td>

<td valign="top" class="value">${fieldValue(bean: dataInstance, field: "pkData")}</td>

</tr>

<tr class="prop">
<td valign="top" class="name"><g:message code="data.eventType.label" default="Event Type" /></td>

<td valign="top" class="value">${dataInstance?.eventType?.encodeAsHTML()}</td>

</tr>

<tr class="prop">
<tr class="prop">
<td valign="top" class="name"><g:message code="data.triggerHistory.label" default="Trigger History" /></td>

<td valign="top" class="value">${dataInstance.triggerHist?.toHtmlString()}</td>
Expand Down
86 changes: 75 additions & 11 deletions grails/symmetricds/grails-app/views/dataEvent/list.gsp
Expand Up @@ -4,7 +4,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="layout" content="main" />
<g:set var="entityName" value="${message(code: 'dataEvent.label', default: 'DataEvent')}" />
<g:set var="entityName" value="${message(code: 'data.label', default: 'Data')}" />
<title><g:message code="default.list.label" args="[entityName]" /></title>
</head>
<body>
Expand All @@ -14,26 +14,90 @@
<div class="message">${flash.message}</div>
</g:if>
<div class="list">
<table>
<table class="list">
<thead>
<tr>
<g:sortableColumn property="dataDataId" title="${message(code: 'data.id.label', default: 'Data Id')}" />
<g:sortableColumn property="dataTableName" title="${message(code: 'data.channelId.label', default: 'Channel Id')}" />
<g:sortableColumn property="dataEventType" title="${message(code: 'data.createTime.label', default: 'Create Time')}" />
<g:sortableColumn property="dataTableName" title="${message(code: 'data.tableName.label', default: 'Table Name')}" />
<g:sortableColumn property="dataEventType" title="${message(code: 'data.eventType.label', default: 'Event Type')}" />
<g:sortableColumn property="dataRowData" title="${message(code: 'data.rowData.label', default: 'Row Data')}" />
<g:sortableColumn property="dataPkData" title="${message(code: 'data.pkData.label', default: 'PK Data')}" />
<g:sortableColumn property="dataOldData" title="${message(code: 'data.oldData.label', default: 'Old Data')}" />
<g:sortableColumn property="dataEventType" title="${message(code: 'data.transactionId.label', default: 'Transaction Id')}" />
<g:sortableColumn property="dataEventType" title="${message(code: 'data.sourceNode.label', default: 'Source Node')}" />
<g:sortableColumn property="dataEventType" title="${message(code: 'data.externalData.label', default: 'External Data')}" />
</tr>
</thead>
<tbody>
<g:each in="${dataEventInstanceList}" status="i" var="dataEventInstance">
<tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
<td><g:link controller="data" action="show" id="${dataEventInstance?.data?.dataId}">${dataEventInstance?.data?.dataId}</g:link></td>
<g:each in="${dataEventInstanceList}" status="index" var="dataEventInstance">
<tr class="${(index % 2) == 0 ? 'odd' : 'even'}">
<td>

<div onmouseover="showPopup(this);" onmouseout="hidePopup(this);" id="popup-container">
<span><g:link controller="data" action="show" id="${dataEventInstance?.data?.dataId}">${dataEventInstance?.data?.dataId}</g:link></span>

<div class="data-panel popup" >
<table class="data-table-popup">
<%
columns = dataEventInstance?.data?.triggerHist?.columnNames?.split(",")
old = dataEventInstance?.data?.toParsedOldData()
rows = dataEventInstance?.data?.toParsedRowData()
pk = dataEventInstance?.data?.toParsedPkData()
%>
<tr>
<td colspan="${columns?.size() == null ? 1 : columns.size() + 1}" class="data-table-name">${dataEventInstance?.data?.tableName}&nbsp;(${dataEventInstance?.data?.eventType?.encodeAsHTML()})</span></td>
</tr>
<tr class="data-table-columns">
<td class="data-column data-label">&nbsp;</td>
<g:each in="${columns}" var="c" status="i">
<td class="data-coulumn${(i % 2) == 0 ? ' alt' : ''}">${c}</td>
</g:each>
</tr><tr>
<td class="data-column data-label">PK</td>
<%pkCounter = 1%>
<g:each in="${pk}" var="p" status="i">
<%pkCounter = i%>
<td class="data-coulumn${(i % 2) == 0 ? ' alt' : ''}">${p}</td>
</g:each>
<%pkLength = pk != null ? pk.length : 0 %>
<g:while test="${pkLength < columns?.length}">
<%pkLength++
pkCounter++%>
<td class="data-coulumn${(pkCounter % 2) == 0 ? ' alt' : ''}">&nbsp;</td>
</g:while>
</tr><tr>
<td class="data-column data-label">New</td>
<g:each in="${rows}" var="r" status="i">
<td class="data-coulumn${(i % 2) == 0 ? ' alt' : ''}${((old == null || rows[i] != old[i]) && dataEventInstance?.data?.eventType?.encodeAsHTML() == "UPDATE") ? ' diff' : ''}">${r}</td>
</g:each>
<%rowsLength = rows != null ? rows.length : 0 %>
<g:while test="${rowsLength < columns?.length}">
<td class="data-coulumn${(rowsLength % 2) == 0 ? ' alt' : ''}">&nbsp;</td>
<%rowsLength++%>
</g:while>
</tr><tr>
<td class="data-column data-label">Old</td>
<g:each in="${old}" var="o" status="i">
<td class="data-coulumn${(i % 2) == 0 ? ' alt' : ''}">${o}</td>
</g:each>
<%oldLength = old != null ? old.length : 0 %>
<g:while test="${oldLength < columns?.length}">
<td class="data-coulumn${(oldLength % 2) == 0 ? ' alt' : ''}">&nbsp;</td>
<%oldLength++%>
</g:while>
</tr>
</table>
</div>
</div>


</td>
<td><g:link controller="channel" action="show" id="${dataEventInstance?.data?.channelId}">${dataEventInstance?.data?.channelId}</g:link></td>
<td>${dataEventInstance?.data?.createTime}</td>
<td>${dataEventInstance?.data?.tableName}</td>
<td>${dataEventInstance?.data?.eventType}</td>
<td>${dataEventInstance?.data?.rowData}</td>
<td>${dataEventInstance?.data?.pkData}</td>
<td>${dataEventInstance?.data?.oldData}</td>
<td>${dataEventInstance?.data?.transactionId}</td>
<td>${dataEventInstance?.data?.sourceNodeId}</td>
<td>${dataEventInstance?.data?.externalData}</td>
</tr>
</g:each>
</tbody>
Expand Down

0 comments on commit f1df8b0

Please sign in to comment.