// ============================================================================
//
// Copyright (C) 2006-2016 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.dataprofiler.core.migration.impl;
import java.io.File;
import java.util.Date;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.talend.commons.emf.EMFUtil;
import org.talend.commons.utils.WorkspaceUtils;
import org.talend.core.model.metadata.builder.connection.DatabaseConnection;
import org.talend.core.model.metadata.builder.database.JavaSqlFactory;
import org.talend.core.model.properties.DatabaseConnectionItem;
import org.talend.core.model.properties.Item;
import org.talend.core.model.properties.PropertiesPackage;
import org.talend.core.model.properties.Property;
import org.talend.cwm.db.connection.ConnectionUtils;
import org.talend.cwm.helper.ConnectionHelper;
import org.talend.dataprofiler.core.migration.AbstractWorksapceUpdateTask;
import org.talend.dq.helper.PropertyHelper;
import org.talend.dq.helper.resourcehelper.PrvResourceFileHelper;
import orgomg.cwm.objectmodel.core.ModelElement;
/**
* set default username for sqlite connection.
*/
public class UpdateSqliteUsernameTask extends AbstractWorksapceUpdateTask {
public Date getOrder() {
return createDate(2012, 7, 24);
}
public MigrationTaskType getMigrationTaskType() {
return MigrationTaskType.FILE;
}
@Override
protected boolean doExecute() throws Exception {
// get all Connections
List<? extends ModelElement> allElement = PrvResourceFileHelper.getInstance().getAllElement();
for (ModelElement me : allElement) {
if (me instanceof DatabaseConnection) {
DatabaseConnection conn = (DatabaseConnection) me;
if (ConnectionUtils.isSqlite(conn)) {
String username = conn.getUsername();
if (username == null || "".equals(username.trim())) { //$NON-NLS-1$
ConnectionHelper.setUsername(conn, JavaSqlFactory.DEFAULT_USERNAME);
saveConn(conn);
}
}
}
}
return true;
}
/**
* DOC xqliu Comment method "saveConn".
*
* @param conn
*/
private void saveConn(DatabaseConnection conn) {
URI uriItem = conn.eResource().getURI();
File fileItem = null;
if (uriItem.isPlatform()) {
fileItem = WorkspaceUtils.ifileToFile(getIFile(conn));
} else {
fileItem = new File(uriItem.toFileString());
}
File fileProp = WorkspaceUtils.ifileToFile(PropertyHelper.getPropertyFile(conn));
Property property = PropertyHelper.getProperty(conn);
Item item = property.getItem();
// save DatabaseConnectionItem
DatabaseConnectionItem dbConnItem = (DatabaseConnectionItem) item;
dbConnItem.setConnection(conn);
Resource itemResource = getResource(fileItem);
EMFUtil.saveResource(itemResource);
// save the property
Resource propResource = getResource(fileProp);
Property newProperty = (Property) EcoreUtil.getObjectByType(propResource.getContents(),
PropertiesPackage.eINSTANCE.getProperty());
newProperty.setAuthor(property.getAuthor());
newProperty.setLabel(dbConnItem.getConnection().getName());
newProperty.setItem(item);
item.setProperty(newProperty);
propResource.getContents().clear();
propResource.getContents().add(newProperty);
propResource.getContents().add(item);
propResource.getContents().add(item.getState());
EMFUtil.saveResource(propResource);
}
/**
* DOC xqliu Comment method "getIFile".
*
* @param modelElement
* @return
*/
private IFile getIFile(ModelElement modelElement) {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
String platformString = modelElement.eResource().getURI().toPlatformString(true);
return root.getFile(new Path(platformString));
}
}