Skip to content
Snippets Groups Projects
Commit 383dd768 authored by srosse's avatar srosse
Browse files

OO-535: implements the first steps toward a life / real time indexer

parent 4d18281d
No related branches found
No related tags found
No related merge requests found
Showing
with 415 additions and 296 deletions
...@@ -23,7 +23,6 @@ import java.util.ArrayList; ...@@ -23,7 +23,6 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import org.olat.core.commons.persistence.SortKey;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModel;
import org.olat.core.gui.components.table.DefaultTableDataModel; import org.olat.core.gui.components.table.DefaultTableDataModel;
...@@ -57,11 +56,6 @@ public class UserSearchFlexiTableModel extends DefaultTableDataModel<UserResultW ...@@ -57,11 +56,6 @@ public class UserSearchFlexiTableModel extends DefaultTableDataModel<UserResultW
public void setTableColumnModel(FlexiTableColumnModel tableColumnModel) { public void setTableColumnModel(FlexiTableColumnModel tableColumnModel) {
columnModel = tableColumnModel; columnModel = tableColumnModel;
} }
@Override
public void load(int firstResult, int maxResults, SortKey... sortedCol) {
//already loaded
}
@Override @Override
public int getColumnCount() { public int getColumnCount() {
......
...@@ -29,7 +29,6 @@ import org.olat.NewControllerFactory; ...@@ -29,7 +29,6 @@ import org.olat.NewControllerFactory;
import org.olat.basesecurity.BaseSecurity; import org.olat.basesecurity.BaseSecurity;
import org.olat.basesecurity.BaseSecurityManager; import org.olat.basesecurity.BaseSecurityManager;
import org.olat.core.CoreSpringFactory; import org.olat.core.CoreSpringFactory;
import org.olat.core.commons.persistence.DBFactory;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component; import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.Link;
......
...@@ -25,7 +25,6 @@ import java.util.List; ...@@ -25,7 +25,6 @@ import java.util.List;
import org.olat.core.CoreSpringFactory; import org.olat.core.CoreSpringFactory;
import org.olat.core.commons.persistence.PersistenceHelper; import org.olat.core.commons.persistence.PersistenceHelper;
import org.olat.core.commons.persistence.SortKey;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItem;
import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.FormItemContainer;
...@@ -360,11 +359,6 @@ public class GroupSearchController extends StepFormBasicController { ...@@ -360,11 +359,6 @@ public class GroupSearchController extends StepFormBasicController {
public void setTableColumnModel(FlexiTableColumnModel tableColumnModel) { public void setTableColumnModel(FlexiTableColumnModel tableColumnModel) {
columnModel = tableColumnModel; columnModel = tableColumnModel;
} }
@Override
public void load(int firstResult, int maxResults, SortKey... orderBy) {
//already loaded
}
@Override @Override
public int getColumnCount() { public int getColumnCount() {
......
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.core.commons.persistence;
import java.util.ArrayList;
import java.util.List;
/**
*
* Initial date: 04.03.2013<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class DefaultResultInfos<U> implements ResultInfos<U> {
private int nextFirstResult;
private int correctedRowCount;
private List<U> objects;
public DefaultResultInfos() {
nextFirstResult = 0;
correctedRowCount = 0;
objects = new ArrayList<U>();
}
public DefaultResultInfos(int nextFirstResult, int correctedRowCount, List<U> objects) {
this.nextFirstResult = nextFirstResult;
this.correctedRowCount = correctedRowCount;
this.objects = objects;
}
@Override
public int getNextFirstResult() {
return nextFirstResult;
}
@Override
public int getCorrectedRowCount() {
return correctedRowCount;
}
public List<U> getObjects() {
return objects;
}
}
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.core.commons.persistence;
import java.util.List;
/**
*
* Initial date: 04.03.2013<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public interface ResultInfos<U> {
public int getNextFirstResult();
public int getCorrectedRowCount();
public List<U> getObjects();
}
...@@ -67,6 +67,7 @@ import org.olat.core.gui.components.form.flexible.impl.elements.TextBoxListEleme ...@@ -67,6 +67,7 @@ import org.olat.core.gui.components.form.flexible.impl.elements.TextBoxListEleme
import org.olat.core.gui.components.form.flexible.impl.elements.TextElementImpl; import org.olat.core.gui.components.form.flexible.impl.elements.TextElementImpl;
import org.olat.core.gui.components.form.flexible.impl.elements.richText.RichTextElementImpl; import org.olat.core.gui.components.form.flexible.impl.elements.richText.RichTextElementImpl;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModel;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataSource;
import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableElementImpl; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableElementImpl;
import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.tree.TreeModel; import org.olat.core.gui.components.tree.TreeModel;
...@@ -915,8 +916,8 @@ public class FormUIFactory { ...@@ -915,8 +916,8 @@ public class FormUIFactory {
} }
public FlexiTableElement addTableElement(UserRequest ureq, String name, FlexiTableDataModel tableModel, public FlexiTableElement addTableElement(UserRequest ureq, String name, FlexiTableDataModel tableModel,
int pageSize, Translator translator, FormItemContainer formLayout) { FlexiTableDataSource dataSource, int pageSize, boolean search, Translator translator, FormItemContainer formLayout) {
FlexiTableElementImpl fte = new FlexiTableElementImpl(ureq, name, translator, tableModel, pageSize); FlexiTableElementImpl fte = new FlexiTableElementImpl(ureq, name, translator, tableModel, dataSource, pageSize, search);
formLayout.add(fte); formLayout.add(fte);
return fte; return fte;
} }
......
...@@ -64,6 +64,12 @@ public interface FlexiTableElement extends FormItem { ...@@ -64,6 +64,12 @@ public interface FlexiTableElement extends FormItem {
public boolean isMultiSelectedIndex(int index); public boolean isMultiSelectedIndex(int index);
/**
* Is a search field enabled
* @return
*/
public boolean isSearch();
/** /**
* Return the page size * Return the page size
......
...@@ -85,9 +85,8 @@ public abstract class AbstractTextElement extends FormItemImpl implements TextEl ...@@ -85,9 +85,8 @@ public abstract class AbstractTextElement extends FormItemImpl implements TextEl
private boolean originalInitialised=false; private boolean originalInitialised=false;
@SuppressWarnings("unchecked")
@Override @Override
public void validate(List validationResults) { public void validate(List<ValidationStatus> validationResults) {
if(checkForNotEmpty && !notEmpty()){ if(checkForNotEmpty && !notEmpty()){
validationResults.add(new ValidationStatusImpl(ValidationStatus.ERROR)); validationResults.add(new ValidationStatusImpl(ValidationStatus.ERROR));
return; return;
......
...@@ -29,6 +29,7 @@ import java.util.List; ...@@ -29,6 +29,7 @@ import java.util.List;
import org.olat.core.gui.UserRequest; import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.form.flexible.impl.FormItemImpl; import org.olat.core.gui.components.form.flexible.impl.FormItemImpl;
import org.olat.core.util.ValidationStatus;
/** /**
* @author patrickb * @author patrickb
...@@ -63,7 +64,7 @@ abstract class FormButton extends FormItemImpl { ...@@ -63,7 +64,7 @@ abstract class FormButton extends FormItemImpl {
* @see org.olat.core.gui.components.form.flexible.impl.FormItemImpl#validate(java.util.List) * @see org.olat.core.gui.components.form.flexible.impl.FormItemImpl#validate(java.util.List)
*/ */
@Override @Override
public void validate(List validationResults) { public void validate(List<ValidationStatus> validationResults) {
// Buttons do not validate // Buttons do not validate
} }
......
...@@ -45,7 +45,7 @@ import org.olat.core.gui.translator.Translator; ...@@ -45,7 +45,7 @@ import org.olat.core.gui.translator.Translator;
* @author patrickb * @author patrickb
*/ */
class FormButtonRenderer implements ComponentRenderer { class FormButtonRenderer implements ComponentRenderer {
@SuppressWarnings("unused")
public void render(Renderer renderer, StringOutput sb, Component source, URLBuilder ubu, Translator translator, public void render(Renderer renderer, StringOutput sb, Component source, URLBuilder ubu, Translator translator,
RenderResult renderResult, String[] args) { RenderResult renderResult, String[] args) {
// //
...@@ -88,17 +88,12 @@ class FormButtonRenderer implements ComponentRenderer { ...@@ -88,17 +88,12 @@ class FormButtonRenderer implements ComponentRenderer {
} }
} }
@SuppressWarnings("unused")
public void renderBodyOnLoadJSFunctionCall(Renderer renderer, StringOutput sb, Component source, RenderingState rstate) { public void renderBodyOnLoadJSFunctionCall(Renderer renderer, StringOutput sb, Component source, RenderingState rstate) {
// TODO Auto-generated method stub //
} }
@SuppressWarnings("unused")
public void renderHeaderIncludes(Renderer renderer, StringOutput sb, Component source, URLBuilder ubu, Translator translator, public void renderHeaderIncludes(Renderer renderer, StringOutput sb, Component source, URLBuilder ubu, Translator translator,
RenderingState rstate) { RenderingState rstate) {
// TODO Auto-generated method stub //
} }
} }
\ No newline at end of file
...@@ -36,6 +36,7 @@ import org.olat.core.gui.control.Disposable; ...@@ -36,6 +36,7 @@ import org.olat.core.gui.control.Disposable;
import org.olat.core.gui.control.Event; import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController; import org.olat.core.gui.control.controller.BasicController;
import org.olat.core.util.ValidationStatus;
/** /**
* Description:<br> * Description:<br>
...@@ -121,9 +122,8 @@ public class FormCancel extends FormItemImpl implements Disposable, Cancel { ...@@ -121,9 +122,8 @@ public class FormCancel extends FormItemImpl implements Disposable, Cancel {
/** /**
* @see org.olat.core.gui.components.form.flexible.impl.FormItemImpl#validate(java.util.List) * @see org.olat.core.gui.components.form.flexible.impl.FormItemImpl#validate(java.util.List)
*/ */
@SuppressWarnings("unchecked")
@Override @Override
public void validate(List validationResults) { public void validate(List<ValidationStatus> validationResults) {
// nothing to do // nothing to do
} }
......
...@@ -36,6 +36,7 @@ import org.olat.core.gui.components.link.FormLinkFactory; ...@@ -36,6 +36,7 @@ import org.olat.core.gui.components.link.FormLinkFactory;
import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.control.Event; import org.olat.core.gui.control.Event;
import org.olat.core.util.StringHelper; import org.olat.core.util.StringHelper;
import org.olat.core.util.ValidationStatus;
/** /**
* Description:<br> * Description:<br>
...@@ -149,7 +150,7 @@ public class FormLinkImpl extends FormItemImpl implements FormLink { ...@@ -149,7 +150,7 @@ public class FormLinkImpl extends FormItemImpl implements FormLink {
} }
@Override @Override
public void validate(List validationResults) { public void validate(List<ValidationStatus> validationResults) {
// typically a link does not validate its data // typically a link does not validate its data
} }
......
...@@ -33,6 +33,7 @@ import org.olat.core.gui.components.form.flexible.elements.Submit; ...@@ -33,6 +33,7 @@ import org.olat.core.gui.components.form.flexible.elements.Submit;
import org.olat.core.gui.components.form.flexible.impl.FormEvent; import org.olat.core.gui.components.form.flexible.impl.FormEvent;
import org.olat.core.logging.AssertException; import org.olat.core.logging.AssertException;
import org.olat.core.util.StringHelper; import org.olat.core.util.StringHelper;
import org.olat.core.util.ValidationStatus;
/** /**
* Description:<br> * Description:<br>
...@@ -82,7 +83,6 @@ public class FormSubmit extends FormButton implements Submit{ ...@@ -82,7 +83,6 @@ public class FormSubmit extends FormButton implements Submit{
* long[], int) * long[], int)
*/ */
@Override @Override
@SuppressWarnings("unused")
public void evalFormRequest(UserRequest ureq) { public void evalFormRequest(UserRequest ureq) {
// no values with submit to be evaluated // no values with submit to be evaluated
getComponent().setDirty(true); getComponent().setDirty(true);
...@@ -91,8 +91,7 @@ public class FormSubmit extends FormButton implements Submit{ ...@@ -91,8 +91,7 @@ public class FormSubmit extends FormButton implements Submit{
/** /**
* @see org.olat.core.gui.components.form.flexible.FormComponent#validate() * @see org.olat.core.gui.components.form.flexible.FormComponent#validate()
*/ */
@SuppressWarnings("unused") public void validate(List<ValidationStatus> statusDescriptinons) {
public void validate(List statusDescriptinons) {
// submit is not validating itself // submit is not validating itself
} }
......
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.core.gui.components.form.flexible.impl.elements.table;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.ComponentRenderer;
import org.olat.core.gui.components.form.flexible.FormItem;
import org.olat.core.gui.components.form.flexible.elements.TextElement;
import org.olat.core.gui.components.form.flexible.impl.FormJSHelper;
import org.olat.core.gui.components.form.flexible.impl.elements.FormSubmit;
import org.olat.core.gui.render.RenderResult;
import org.olat.core.gui.render.Renderer;
import org.olat.core.gui.render.RenderingState;
import org.olat.core.gui.render.StringOutput;
import org.olat.core.gui.render.URLBuilder;
import org.olat.core.gui.translator.Translator;
/**
*
* Initial date: 01.03.2013<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public abstract class AbstractFlexiTableRenderer implements ComponentRenderer {
@Override
public void render(Renderer renderer, StringOutput sb, Component source, URLBuilder ubu, Translator translator,
RenderResult renderResult, String[] args) {
FlexiTableComponent ftC = (FlexiTableComponent) source;
FlexiTableElementImpl ftE = ftC.getFlexiTableElement();
if(ftE.isSearch()) {
renderSearchFields(renderer, sb, ftE, ubu, translator, renderResult, args);
}
String id = ftC.getFormDispatchId();
sb.append("<div class=\"b_table_wrapper b_floatscrollbox\">")
.append("<table id=\"").append(id).append("\">");
//render headers
renderHeaders(sb, ftE, translator);
//render body
renderBody(renderer, sb, ftC, ubu, translator, renderResult);
sb.append("</table></div>");
//source
if (source.isEnabled()) {
sb.append(FormJSHelper.getJSStartWithVarDeclaration(id));
sb.append(FormJSHelper.getSetFlexiFormDirty(ftE.getRootForm(), id));
sb.append(FormJSHelper.getJSEnd());
}
}
protected void renderSearchFields(Renderer renderer, StringOutput sb, FlexiTableElementImpl ftE, URLBuilder ubu, Translator translator,
RenderResult renderResult, String[] args) {
TextElement searchEl = ftE.getSearchElement();
if(searchEl != null) {
Component searchC = searchEl.getComponent();
searchC.getHTMLRendererSingleton().render(renderer, sb, searchC, ubu, translator, renderResult, args);
}
FormSubmit searchButton = ftE.getSearchButton();
if(searchButton != null) {
Component searchB = searchButton.getComponent();
searchB.getHTMLRendererSingleton().render(renderer, sb, searchB, ubu, translator, renderResult, args);
}
}
protected void renderHeaders(StringOutput target, FlexiTableElementImpl ftE, Translator translator) {
FlexiTableDataModel dataModel = ftE.getTableDataModel();
FlexiTableColumnModel columnModel = dataModel.getTableColumnModel();
target.append("<thead><tr>");
int col = 0;
if(ftE.isMultiSelect()) {
target.append("<th class='b_first_child'>").append("choice").append("</th>");
col++;
}
int cols = columnModel.getColumnCount();
for(int i=0; i<cols; i++) {
FlexiColumnModel fcm = columnModel.getColumnModel(i);
renderHeader(target, fcm, col, cols, translator);
col++;
}
target.append("</tr></thead>");
}
protected void renderHeader(StringOutput target, FlexiColumnModel fcm, int colPos, int numOfCols, Translator translator) {
String header = translator.translate(fcm.getHeaderKey());
target.append("<th class=\"");
// add css class for first and last column to support older browsers
if (colPos == 0) target.append(" b_first_child");
if (colPos == numOfCols-1) target.append(" b_last_child");
target.append("\">").append(header).append("</th>");
}
protected void renderBody(Renderer renderer, StringOutput target, FlexiTableComponent ftC,
URLBuilder ubu, Translator translator, RenderResult renderResult) {
String id = ftC.getFormDispatchId();
FlexiTableElementImpl ftE = ftC.getFlexiTableElement();
FlexiTableDataModel dataModel = ftE.getTableDataModel();
// build rows
target.append("<tbody>");
// the really selected rowid (from the tabledatamodel)
int firstRow = ftE.getFirstRow();
int maxRows = ftE.getMaxRows();
int rows = dataModel.getRowCount();
int lastRow = Math.min(rows, firstRow + maxRows);
String rowIdPrefix = "row_" + id + "-";
for (int i = firstRow; i < lastRow; i++) {
renderRow(renderer, target, ftC, rowIdPrefix, i, rows, ubu, translator, renderResult);
}
// end of table table
target.append("</tbody>");
}
protected void renderRow(Renderer renderer, StringOutput target, FlexiTableComponent ftC, String rowIdPrefix,
int row, int rows, URLBuilder ubu, Translator translator, RenderResult renderResult) {
FlexiTableElementImpl ftE = ftC.getFlexiTableElement();
FlexiTableColumnModel columnsModel = ftE.getTableDataModel().getTableColumnModel();
int numOfCols = columnsModel.getColumnCount();
// use alternating css class
String cssClass;
if (row % 2 == 0) cssClass = "";
else cssClass = "b_table_odd";
// add css class for first and last column to support older browsers
if (row == 0) cssClass += " b_first_child";
if (row == rows-1) cssClass += " b_last_child";
target.append("<tr id='").append(rowIdPrefix).append(row)
.append("' class=\"").append(cssClass).append("\">");
int col = 0;
if(ftE.isMultiSelect()) {
target.append("<td class='b_first_child'>")
.append("<input type='checkbox' name='ftb_ms' value='").append(rowIdPrefix).append(row).append("'");
if(ftE.isMultiSelectedIndex(row)) {
target.append(" checked='checked'");
}
target.append("/></td>");
col++;
}
for (int j = 0; j<numOfCols; j++) {
FlexiColumnModel fcm = columnsModel.getColumnModel(j);
renderCell(renderer, target, ftC, fcm, row, col, numOfCols, ubu, translator, renderResult);
col++;
}
target.append("</tr>");
}
protected void renderCell(Renderer renderer, StringOutput target, FlexiTableComponent ftC, FlexiColumnModel fcm,
int row, int col, int numOfCols, URLBuilder ubu, Translator translator, RenderResult renderResult) {
FlexiTableElementImpl ftE = ftC.getFlexiTableElement();
FlexiTableDataModel dataModel = ftE.getTableDataModel();
int alignment = fcm.getAlignment();
String cssClass = (alignment == FlexiColumnModel.ALIGNMENT_LEFT ? "b_align_normal" : (alignment == FlexiColumnModel.ALIGNMENT_RIGHT ? "b_align_inverse" : "b_align_center"));
// add css class for first and last column to support older browsers
if (col == 0) cssClass += " b_first_child";
if (col == numOfCols-1) cssClass += " b_last_child";
target.append("<td class=\"").append(cssClass).append("\">");
if (col == 0) target.append("<a name=\"table\"></a>"); //add once for accessabillitykey
int columnIndex = fcm.getColumnIndex();
Object cellValue = columnIndex >= 0 ?
dataModel.getValueAt(row, columnIndex) : null;
if (cellValue instanceof FormItem) {
FormItem formItem = (FormItem)cellValue;
formItem.setTranslator(translator);
if(ftE.getRootForm() != formItem.getRootForm()) {
formItem.setRootForm(ftE.getRootForm());
}
ftE.addFormItem(formItem);
formItem.getComponent().getHTMLRendererSingleton().render(renderer, target, formItem.getComponent(),
ubu, translator, renderResult, null);
} else {
fcm.getCellRenderer().render(target, cellValue, row, ftC, ubu, translator);
}
target.append("</td>");
}
@Override
public void renderHeaderIncludes(Renderer renderer, StringOutput sb, Component source, URLBuilder ubu,
Translator translator, RenderingState rstate) {
//
}
@Override
public void renderBodyOnLoadJSFunctionCall(Renderer renderer, StringOutput sb, Component source,
RenderingState rstate) {
//
}
}
...@@ -22,12 +22,10 @@ package org.olat.core.gui.components.form.flexible.impl.elements.table; ...@@ -22,12 +22,10 @@ package org.olat.core.gui.components.form.flexible.impl.elements.table;
import org.olat.core.gui.components.Component; import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.ComponentRenderer; import org.olat.core.gui.components.ComponentRenderer;
import org.olat.core.gui.components.form.flexible.FormItem;
import org.olat.core.gui.components.form.flexible.impl.Form; import org.olat.core.gui.components.form.flexible.impl.Form;
import org.olat.core.gui.components.form.flexible.impl.FormJSHelper; import org.olat.core.gui.components.form.flexible.impl.FormJSHelper;
import org.olat.core.gui.render.RenderResult; import org.olat.core.gui.render.RenderResult;
import org.olat.core.gui.render.Renderer; import org.olat.core.gui.render.Renderer;
import org.olat.core.gui.render.RenderingState;
import org.olat.core.gui.render.StringOutput; import org.olat.core.gui.render.StringOutput;
import org.olat.core.gui.render.URLBuilder; import org.olat.core.gui.render.URLBuilder;
import org.olat.core.gui.translator.Translator; import org.olat.core.gui.translator.Translator;
...@@ -36,7 +34,7 @@ import org.olat.core.gui.translator.Translator; ...@@ -36,7 +34,7 @@ import org.olat.core.gui.translator.Translator;
* Render the table using the jQuery plugin DataTables * Render the table using the jQuery plugin DataTables
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*/ */
class FlexiDataTablesRenderer implements ComponentRenderer { class FlexiDataTablesRenderer extends AbstractFlexiTableRenderer implements ComponentRenderer {
/** /**
* @see org.olat.core.gui.components.ComponentRenderer#render(org.olat.core.gui.render.Renderer, * @see org.olat.core.gui.components.ComponentRenderer#render(org.olat.core.gui.render.Renderer,
...@@ -46,10 +44,13 @@ class FlexiDataTablesRenderer implements ComponentRenderer { ...@@ -46,10 +44,13 @@ class FlexiDataTablesRenderer implements ComponentRenderer {
* org.olat.core.gui.translator.Translator, * org.olat.core.gui.translator.Translator,
* org.olat.core.gui.render.RenderResult, java.lang.String[]) * org.olat.core.gui.render.RenderResult, java.lang.String[])
*/ */
@Override
public void render(Renderer renderer, StringOutput target, Component source, public void render(Renderer renderer, StringOutput target, Component source,
URLBuilder ubu, Translator translator, RenderResult renderResult, URLBuilder ubu, Translator translator, RenderResult renderResult,
String[] args) { String[] args) {
//
super.render(renderer, target, source, ubu, translator, renderResult, args);
FlexiTableComponent ftC = (FlexiTableComponent) source; FlexiTableComponent ftC = (FlexiTableComponent) source;
FlexiTableElementImpl ftE = ftC.getFlexiTableElement(); FlexiTableElementImpl ftE = ftC.getFlexiTableElement();
FlexiTableDataModel dataModel = ftE.getTableDataModel(); FlexiTableDataModel dataModel = ftE.getTableDataModel();
...@@ -57,22 +58,6 @@ class FlexiDataTablesRenderer implements ComponentRenderer { ...@@ -57,22 +58,6 @@ class FlexiDataTablesRenderer implements ComponentRenderer {
Form rootForm = ftE.getRootForm(); Form rootForm = ftE.getRootForm();
String id = ftC.getFormDispatchId(); String id = ftC.getFormDispatchId();
target.append("<div class=\"b_table_wrapper b_floatscrollbox\">")
.append("<table id=\"").append(id).append("\">");
renderTHead(target, ftE, translator);
renderTBody(renderer, target, ftC, ubu, translator, renderResult);
target.append("</table>")
.append("</div>");
if (source.isEnabled()) {
target.append(FormJSHelper.getJSStartWithVarDeclaration(id));
target.append(FormJSHelper.getSetFlexiFormDirty(ftE.getRootForm(), id));
target.append(FormJSHelper.getJSEnd());
}
int rows = dataModel.getRowCount(); int rows = dataModel.getRowCount();
target.append("<script>") target.append("<script>")
...@@ -131,140 +116,4 @@ class FlexiDataTablesRenderer implements ComponentRenderer { ...@@ -131,140 +116,4 @@ class FlexiDataTablesRenderer implements ComponentRenderer {
.append("});\n") .append("});\n")
.append("</script>\n"); .append("</script>\n");
} }
/**
*
* @param target
* @param ftE
* @param translator
*/
private void renderTHead(StringOutput target, FlexiTableElementImpl ftE, Translator translator) {
FlexiTableDataModel dataModel = ftE.getTableDataModel();
FlexiTableColumnModel columnModel = dataModel.getTableColumnModel();
target.append("<thead><tr>");
int col = 0;
if(ftE.isMultiSelect()) {
target.append("<th class='b_first_child'>").append("choice").append("</th>");
col++;
}
int cols = columnModel.getColumnCount();
for(int i=0; i<cols; i++) {
FlexiColumnModel fcm = columnModel.getColumnModel(i);
String header = translator.translate(fcm.getHeaderKey());
target.append("<th class=\"");
// add css class for first and last column to support older browsers
if (col == 0) target.append(" b_first_child");
if (col == cols-1) target.append(" b_last_child");
target.append("\">").append(header).append("</th>");
col++;
}
target.append("</tr></thead>");
}
public void renderTBody(Renderer renderer, StringOutput target, FlexiTableComponent ftC,
URLBuilder ubu, Translator translator, RenderResult renderResult) {
String id = ftC.getFormDispatchId();
FlexiTableElementImpl ftE = ftC.getFlexiTableElement();
FlexiTableDataModel dataModel = ftE.getTableDataModel();
FlexiTableColumnModel columnsModel = dataModel.getTableColumnModel();
// build rows
target.append("<tbody>");
// the really selected rowid (from the tabledatamodel)
int firstRow = ftE.getFirstRow();
int maxRows = ftE.getMaxRows();
int rows = dataModel.getRowCount();
int lastRow = Math.min(rows, firstRow + maxRows);
int cols = columnsModel.getColumnCount();
String rowIdPrefix = "row_" + id + "-";
dataModel.load(firstRow, maxRows);//load needed rows
for (int i = firstRow; i < lastRow; i++) {
// use alternating css class
String cssClass;
if (i % 2 == 0) cssClass = "";
else cssClass = "b_table_odd";
// add css class for first and last column to support older browsers
if (i == 0) cssClass += " b_first_child";
if (i == rows-1) cssClass += " b_last_child";
target.append("<tr id='").append(rowIdPrefix).append(i)
.append("' class=\"").append(cssClass).append("\">");
int col = 0;
if(ftE.isMultiSelect()) {
target.append("<td class='b_first_child'>")
.append("<input type='checkbox' name='ftb_ms' value='").append(rowIdPrefix).append(i).append("'");
if(ftE.isMultiSelectedIndex(i)) {
target.append(" checked='checked'");
}
target.append("/></td>");
col++;
}
for (int j = 0; j < cols; j++) {
FlexiColumnModel fcm = columnsModel.getColumnModel(j);
int alignment = fcm.getAlignment();
cssClass = (alignment == FlexiColumnModel.ALIGNMENT_LEFT ? "b_align_normal" : (alignment == FlexiColumnModel.ALIGNMENT_RIGHT ? "b_align_inverse" : "b_align_center"));
// add css class for first and last column to support older browsers
if (col == 0) cssClass += " b_first_child";
if (col == cols-1) cssClass += " b_last_child";
target.append("<td class=\"").append(cssClass).append("\">");
if (col == 0) target.append("<a name=\"table\"></a>"); //add once for accessabillitykey
int columnIndex = fcm.getColumnIndex();
Object cellValue = columnIndex >= 0 ?
dataModel.getValueAt(i, columnIndex) : null;
if (cellValue instanceof FormItem) {
FormItem formItem = (FormItem)cellValue;
formItem.setTranslator(translator);
if(ftE.getRootForm() != formItem.getRootForm()) {
formItem.setRootForm(ftE.getRootForm());
}
ftE.addFormItem(formItem);
formItem.getComponent().getHTMLRendererSingleton().render(renderer, target, formItem.getComponent(),
ubu, translator, renderResult, null);
} else {
fcm.getCellRenderer().render(target, cellValue, i, ftC, ubu, translator);
}
target.append("</td>");
}
target.append("</tr>");
}
// end of table table
target.append("</tbody>");
}
/**
* @see org.olat.core.gui.components.ComponentRenderer#renderBodyOnLoadJSFunctionCall(org.olat.core.gui.render.Renderer,
* org.olat.core.gui.render.StringOutput,
* org.olat.core.gui.components.Component,
* org.olat.core.gui.render.RenderingState)
*/
public void renderBodyOnLoadJSFunctionCall(Renderer renderer,
StringOutput sb, Component source, RenderingState rstate) {
//
}
/**
* @see org.olat.core.gui.components.ComponentRenderer#renderHeaderIncludes(org.olat.core.gui.render.Renderer,
* org.olat.core.gui.render.StringOutput,
* org.olat.core.gui.components.Component,
* org.olat.core.gui.render.URLBuilder,
* org.olat.core.gui.translator.Translator,
* org.olat.core.gui.render.RenderingState)
*/
public void renderHeaderIncludes(Renderer renderer, StringOutput sb,
Component source, URLBuilder ubu, Translator translator,
RenderingState rstate) {
//
}
} }
\ No newline at end of file
...@@ -28,11 +28,8 @@ package org.olat.core.gui.components.form.flexible.impl.elements.table; ...@@ -28,11 +28,8 @@ package org.olat.core.gui.components.form.flexible.impl.elements.table;
import org.olat.core.gui.components.Component; import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.ComponentRenderer; import org.olat.core.gui.components.ComponentRenderer;
import org.olat.core.gui.components.form.flexible.FormItem;
import org.olat.core.gui.components.form.flexible.impl.FormJSHelper;
import org.olat.core.gui.render.RenderResult; import org.olat.core.gui.render.RenderResult;
import org.olat.core.gui.render.Renderer; import org.olat.core.gui.render.Renderer;
import org.olat.core.gui.render.RenderingState;
import org.olat.core.gui.render.StringOutput; import org.olat.core.gui.render.StringOutput;
import org.olat.core.gui.render.URLBuilder; import org.olat.core.gui.render.URLBuilder;
import org.olat.core.gui.translator.Translator; import org.olat.core.gui.translator.Translator;
...@@ -41,97 +38,11 @@ import org.olat.core.gui.translator.Translator; ...@@ -41,97 +38,11 @@ import org.olat.core.gui.translator.Translator;
* Render the table as a long HTML table * Render the table as a long HTML table
* @author Christian Guretzki * @author Christian Guretzki
*/ */
class FlexiTableClassicRenderer implements ComponentRenderer { class FlexiTableClassicRenderer extends AbstractFlexiTableRenderer implements ComponentRenderer {
public void render(Renderer renderer, StringOutput target, Component source, @Override
URLBuilder ubu, Translator translator, RenderResult renderResult, public void render(Renderer renderer, StringOutput target, Component source, URLBuilder ubu,
String[] args) { Translator translator, RenderResult renderResult, String[] args) {
// super.render(renderer, target, source, ubu, translator, renderResult, args);
FlexiTableComponent ftC = (FlexiTableComponent) source;
FlexiTableElementImpl ftE = ftC.getFlexiTableElement();
String id = ftC.getFormDispatchId();
target.append("<div class=\"b_table_wrapper b_floatscrollbox\">")
.append("<table id=\"").append(id).append("\">");
FlexiTableDataModel dataModel = ftE.getTableDataModel();
FlexiTableColumnModel columnsModel = dataModel.getTableColumnModel();
int rows = dataModel.getRowCount();
int cols = columnsModel.getColumnCount();
// 1. build header links
target.append("<thead><tr>");
for (int i = 0; i < cols; i++) {
FlexiColumnModel fcm = columnsModel.getColumnModel(i);
String header = translator.translate(fcm.getHeaderKey());
target.append("<th class=\"");
// add css class for first and last column to support older browsers
if (i == 0) target.append(" b_first_child");
if (i == cols-1) target.append(" b_last_child");
target.append("\">").append(header).append("</th>");
}
target.append("</tr></thead>");
// build rows
target.append("<tbody>");
// the really selected rowid (from the tabledatamodel)
dataModel.load(0, rows);
for (int i = 0; i < rows; i++) {
// use alternating css class
String cssClass;
if (i % 2 == 0) cssClass = "";
else cssClass = "b_table_odd";
// add css class for first and last column to support older browsers
if (i == 0) cssClass += " b_first_child";
if (i == rows-1) cssClass += " b_last_child";
target.append("<tr class=\"").append(cssClass).append("\">");
for (int j = 0; j < cols; j++) {
FlexiColumnModel fcm = columnsModel.getColumnModel(j);
int alignment = fcm.getAlignment();
cssClass = (alignment == FlexiColumnModel.ALIGNMENT_LEFT ? "b_align_normal" : (alignment == FlexiColumnModel.ALIGNMENT_RIGHT ? "b_align_inverse" : "b_align_center"));
// add css class for first and last column to support older browsers
if (j == 0) cssClass += " b_first_child";
if (j == cols-1) cssClass += " b_last_child";
target.append("<td class=\"").append(cssClass).append("\">");
if (j == 0) target.append("<a name=\"table\"></a>"); //add once for accessabillitykey
int columnIndex = fcm.getColumnIndex();
Object cellValue = columnIndex >= 0 ? dataModel.getValueAt(i, columnIndex) : null;
if (cellValue instanceof FormItem) {
FormItem formItem = (FormItem)cellValue;
formItem.setTranslator(translator);
formItem.setRootForm(ftE.getRootForm());
formItem.getComponent().getHTMLRendererSingleton().render(renderer, target, formItem.getComponent(), ubu, translator, renderResult, args);
} else {
fcm.getCellRenderer().render(target, cellValue, i, ftC, ubu, translator);
}
target.append("</td>");
}
target.append("</tr>");
}
// end of table table
target.append("</tbody></table>");
target.append("</div>");
if (source.isEnabled()) {
// add set dirty form only if enabled
target.append(FormJSHelper.getJSStartWithVarDeclaration(id));
target.append(FormJSHelper.getSetFlexiFormDirty(ftE.getRootForm(), id));
target.append(FormJSHelper.getJSEnd());
}
}
public void renderBodyOnLoadJSFunctionCall(Renderer renderer, StringOutput sb, Component source, RenderingState rstate) {
//
}
public void renderHeaderIncludes(Renderer renderer, StringOutput sb, Component source, URLBuilder ubu, Translator translator, RenderingState rstate) {
//
} }
} }
\ No newline at end of file
...@@ -35,7 +35,7 @@ import java.util.List; ...@@ -35,7 +35,7 @@ import java.util.List;
*/ */
public class FlexiTableColumnModelImpl implements FlexiTableColumnModel { public class FlexiTableColumnModelImpl implements FlexiTableColumnModel {
List<FlexiColumnModel> columnModelList = new ArrayList<FlexiColumnModel>(); private final List<FlexiColumnModel> columnModelList = new ArrayList<FlexiColumnModel>();
/** /**
* @return * @return
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
package org.olat.core.gui.components.form.flexible.impl.elements.table; package org.olat.core.gui.components.form.flexible.impl.elements.table;
import org.olat.core.commons.persistence.SortKey;
/** /**
* Interface for table data model including column models. * Interface for table data model including column models.
...@@ -39,12 +38,6 @@ public interface FlexiTableDataModel { ...@@ -39,12 +38,6 @@ public interface FlexiTableDataModel {
*/ */
public int getRowCount(); public int getRowCount();
/**
* Load the rows needed for paging
* @param firstResult
* @param maxResults
*/
public void load(int firstResult, int maxResults, SortKey... orderBy);
/** /**
* Return Object for certain table cell. * Return Object for certain table cell.
......
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
package org.olat.core.gui.components.form.flexible.impl.elements.table; package org.olat.core.gui.components.form.flexible.impl.elements.table;
import org.olat.core.commons.persistence.SortKey;
import org.olat.core.gui.components.table.TableDataModel; import org.olat.core.gui.components.table.TableDataModel;
/** /**
...@@ -59,11 +58,6 @@ public class FlexiTableDataModelImpl<T> implements FlexiTableDataModel { ...@@ -59,11 +58,6 @@ public class FlexiTableDataModelImpl<T> implements FlexiTableDataModel {
return tableModel.getObject(row); return tableModel.getObject(row);
} }
@Override
public void load(int firstResult, int maxResults, SortKey... orderby) {
//already loaded
}
/** /**
* Return Object for certain table cell. * Return Object for certain table cell.
* @param row Row number [0...row] * @param row Row number [0...row]
......
/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.core.gui.components.form.flexible.impl.elements.table;
import java.util.List;
import org.olat.core.commons.persistence.ResultInfos;
import org.olat.core.commons.persistence.SortKey;
/**
*
* Initial date: 01.03.2013<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public interface FlexiTableDataSource<U> {
/**
* Load the rows needed for paging
* @param firstResult
* @param maxResults
*/
public ResultInfos<U> load(int firstResult, int maxResults, SortKey... orderBy);
/**
*
* @param firstResult
* @param maxResults
* @param orderBy
*/
public ResultInfos<U> search(String query, List<String> addQueries, int firstResult, int maxResults, SortKey... orderBy);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment