Skip to content

Commit

Permalink
Merge branch 'master' of git://git.evolveum.com/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Feb 24, 2014
2 parents 09f0a03 + d8272ee commit 9bd5fd7
Show file tree
Hide file tree
Showing 28 changed files with 2,330 additions and 553 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,27 +17,31 @@
package com.evolveum.midpoint.init;

import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.prism.Objectable;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.dom.PrismDomProcessor;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ReportTypeUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.task.api.TaskManager;
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.util.WebMiscUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_2a.ReportType;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.springframework.beans.factory.annotation.Autowired;

import java.io.File;
import java.io.FileFilter;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import java.util.Arrays;
import java.util.Comparator;

/**
* @author lazyman
Expand All @@ -50,9 +54,7 @@ public class InitialDataImport {
private static final String OPERATION_INITIAL_OBJECTS_IMPORT = DOT_CLASS + "initialObjectsImport";
private static final String OPERATION_IMPORT_OBJECT = DOT_CLASS + "importObject";

private static final String OBJECTS_FILE = "objects.xml";

@Autowired(required = true)
@Autowired
private transient PrismContext prismContext;
private ModelService model;
private TaskManager taskManager;
Expand All @@ -76,53 +78,82 @@ public void init() {

int count = 0;
int errors = 0;
try {
PrismDomProcessor domProcessor = prismContext.getPrismDomProcessor();

List<PrismObject<? extends Objectable>> objects = domProcessor.parseObjects(getResource(OBJECTS_FILE));
for (PrismObject object : objects) {
OperationResult result = mainResult.createSubresult(OPERATION_IMPORT_OBJECT);

boolean importObject = true;
try {
model.getObject(object.getCompileTimeClass(), object.getOid(), null, task, result);
importObject = false;
result.recordSuccess();
} catch (ObjectNotFoundException ex) {
importObject = true;
} catch (Exception ex) {
LoggingUtils.logException(LOGGER, "Couldn't get object with oid {} from model", ex,
object.getOid());
result.recordWarning("Couldn't get object with oid '" + object.getOid() + "' from model",
ex);

PrismDomProcessor domProcessor = prismContext.getPrismDomProcessor();
File[] files = getInitialImportObjects();
LOGGER.info("Importing files {}.", Arrays.toString(files));

for (File file : files) {
try {
LOGGER.info("Initial import of file {}.", file.getName());
PrismObject object = domProcessor.parseObject(file);
if (ReportType.class.equals(object.getCompileTimeClass())) {
ReportTypeUtil.applyDefinition(object, prismContext);
}

if (!importObject) {
Boolean importObject = importObject(object, file, task, mainResult);
if (importObject == null) {
continue;
}

ObjectDelta delta = ObjectDelta.createAddDelta(object);
try {
model.executeChanges(WebMiscUtil.createDeltaCollection(delta), null, task, result);
result.recordSuccess();
LOGGER.info("Created {} as part of initial import", object);
count++;
} catch (Exception e) {
LoggingUtils.logException(LOGGER, "Couldn't import {} from file {}: ", e, object, OBJECTS_FILE, e.getMessage());
result.recordFatalError(e);
errors++;
if (importObject) {
count++;
} else {
errors++;
}
} catch (Exception ex) {
LoggingUtils.logException(LOGGER, "Couldn't import file {}", ex, file.getName());
mainResult.recordFatalError("Couldn't import file '" + file.getName() + "'", ex);
}
} catch (Exception ex) {
LoggingUtils.logException(LOGGER, "Couldn't import file {}", ex, OBJECTS_FILE);
mainResult.recordFatalError("Couldn't import file '" + OBJECTS_FILE + "'", ex);
}

mainResult.recomputeStatus("Couldn't import objects.");

LOGGER.info("Initial object import finished ({} objects imported, {} errors)", count, errors);
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("Initialization status:\n" + mainResult.debugDump());
LOGGER.trace("Initialization status:\n" + mainResult.debugDump());
}
}

/**
* @param object
* @param task
* @param mainResult
* @return null if nothing was imported, true if it was success, otherwise false
*/
private Boolean importObject(PrismObject object, File file, Task task, OperationResult mainResult) {
OperationResult result = mainResult.createSubresult(OPERATION_IMPORT_OBJECT);

boolean importObject = true;
try {
model.getObject(object.getCompileTimeClass(), object.getOid(), null, task, result);
importObject = false;
result.recordSuccess();
} catch (ObjectNotFoundException ex) {
importObject = true;
} catch (Exception ex) {
LoggingUtils.logException(LOGGER, "Couldn't get object with oid {} from model", ex,
object.getOid());
result.recordWarning("Couldn't get object with oid '" + object.getOid() + "' from model",
ex);
}

if (!importObject) {
return null;
}

ObjectDelta delta = ObjectDelta.createAddDelta(object);
try {
model.executeChanges(WebMiscUtil.createDeltaCollection(delta), null, task, result);
result.recordSuccess();
LOGGER.info("Created {} as part of initial import", object);
return true;
} catch (Exception e) {
LoggingUtils.logException(LOGGER, "Couldn't import {} from file {}: ", e, object,
file.getName(), e.getMessage());
result.recordFatalError(e);

LOGGER.info("\n" + result.debugDump());
return false;
}
}

Expand All @@ -135,4 +166,40 @@ private File getResource(String name) {
}
return new File(path);
}

private File[] getInitialImportObjects() {
File folder = getResource("initial-objects");
File[] files = folder.listFiles(new FileFilter() {

@Override
public boolean accept(File pathname) {
if (pathname.isDirectory()) {
return false;
}

return true;
}
});
Arrays.sort(files, new Comparator<File>() {

@Override
public int compare(File o1, File o2) {
int n1 = getNumberFromName(o1);
int n2 = getNumberFromName(o2);

return n1 - n2;
}
});

return files;
}

private int getNumberFromName(File file) {
String name = file.getName();
String number = StringUtils.left(name, 3);
if (number.matches("[\\d]+")) {
return Integer.parseInt(number);
}
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,11 @@ public void initiate(AjaxRequestTarget target) {

public void onRequest() {
final InputStream byteStream = initStream();

if(byteStream == null){
return;
}

IResourceStream resourceStream = new AbstractResourceStream(){

@Override
Expand All @@ -76,7 +81,6 @@ public InputStream getInputStream() throws ResourceStreamNotFoundException {
@Override
public void close() throws IOException {
byteStream.close();

}

};
Expand All @@ -94,6 +98,5 @@ public void setContentType(String contentType) {
this.contentType = contentType;
}


protected abstract InputStream initStream();
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.evolveum.midpoint.web.component.data;

import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.AjaxSubmitButton;
import com.evolveum.midpoint.web.component.data.column.DoubleButtonColumn;
import com.evolveum.midpoint.web.component.util.SimplePanel;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand Down Expand Up @@ -48,6 +49,12 @@ private void createLayout(){
public void onClick(AjaxRequestTarget target) {
firstPerformed(target, DoubleButtonPanel.this.getModel());
}

@Override
public boolean isEnabled(){
return isFirstEnabled(DoubleButtonPanel.this.getModel());
}

};
firstButton.add(new AttributeAppender("class", getFirstCssClass()));

Expand All @@ -56,6 +63,11 @@ public void onClick(AjaxRequestTarget target) {
public void onClick(AjaxRequestTarget target) {
secondPerformed(target, DoubleButtonPanel.this.getModel());
}

@Override
public boolean isEnabled(){
return isSecondEnabled(DoubleButtonPanel.this.getModel());
}
};
secondButton.add(new AttributeAppender("class", getSecondCssClass()));

Expand Down Expand Up @@ -111,4 +123,20 @@ private StringResourceModel createButtonStringResource(String caption){

public void firstPerformed(AjaxRequestTarget target, IModel<T> model){}
public void secondPerformed(AjaxRequestTarget target, IModel<T> model){}

public boolean isFirstEnabled(IModel<T> model){
return true;
}

public boolean isSecondEnabled(IModel<T> model){
return true;
}

public AjaxButton getFirstButton(){
return (AjaxButton) get(ID_BUTTON_FIRST);
}

public AjaxButton getSecondButton(){
return (AjaxButton) get(ID_BUTTON_SECOND);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@
public class DoubleButtonColumn<T extends Serializable> extends AbstractColumn<T, String>{

public static final String BUTTON_BASE_CLASS = "btn";
public static final String BUTTON_DISABLED = "btn-disabled";

private DoubleButtonPanel panel;

public enum BUTTON_COLOR_CLASS{
DEFAULT("btn-default"), PRIMARY("btn-primary"), SUCCESS("btn-success"),
Expand Down Expand Up @@ -65,7 +68,7 @@ public DoubleButtonColumn(IModel<String> displayModel, String propertyExpression
public void populateItem(final Item<ICellPopulator<T>> cellItem, String componentId,
final IModel<T> rowModel){

cellItem.add(new DoubleButtonPanel<T>(componentId, rowModel){
panel = new DoubleButtonPanel<T>(componentId, rowModel){

@Override
public String getFirstCssSizeClass(){
Expand Down Expand Up @@ -106,7 +109,16 @@ public void firstPerformed(AjaxRequestTarget target, IModel<T> model){
public void secondPerformed(AjaxRequestTarget target, IModel<T> model){
secondClicked(target, model);
}
});

public boolean isFirstEnabled(IModel<T> model){
return isFirstButtonEnabled(model);
}

public boolean isSecondEnabled(IModel<T> model){
return isSecondButtonEnabled(model);
}
};
cellItem.add(panel);
}

public void firstClicked(AjaxRequestTarget target, IModel<T> model){}
Expand Down Expand Up @@ -135,4 +147,16 @@ public String getFirstCap(){
public String getSecondCap(){
return secondCaption;
}

public boolean isFirstButtonEnabled(IModel<T> model){
return true;
}

public boolean isSecondButtonEnabled(IModel<T> model){
return true;
}

public DoubleButtonPanel getButtonPanel(){
return panel;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,13 @@
<div wicket:id="confirmDeletePopup" />

<form wicket:id="searchForm" class="form-inline pull-right search-form">
<div class="form-group">
<label class="sr-only">
<wicket:message key="pageCreatedReports.filter.reportType" />
</label>
<select class="form-control input-sm" wicket:id="reportType" />
</div>

<div class="form-group">
<label class="sr-only">
<wicket:message key="pageCreatedReports.filter.filetype"/>
Expand Down
Loading

0 comments on commit 9bd5fd7

Please sign in to comment.