/*
* Copyright 1999-2012 Alibaba Group.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.cobar.manager.web.commons;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.concurrent.locks.ReentrantLock;
import org.apache.log4j.Logger;
import org.junit.Assert;
import com.alibaba.cobar.manager.dao.xml.ClusterDAOImple;
import com.alibaba.cobar.manager.dao.xml.CobarDAOImple;
import com.alibaba.cobar.manager.dao.xml.PropertyDAOImple;
import com.alibaba.cobar.manager.dao.xml.UserDAOImple;
import com.alibaba.cobar.manager.dao.xml.XMLFileLoaderPath;
import com.alibaba.cobar.manager.dataobject.xml.ClusterDO;
import com.alibaba.cobar.manager.dataobject.xml.CobarDO;
import com.alibaba.cobar.manager.dataobject.xml.UserDO;
public class XmlFile {
private String xmlPath = null;
private final Logger logger = Logger.getLogger(XmlFile.class);
private static final ReentrantLock lock = new ReentrantLock();
private XMLFileLoaderPath xmlFileLoader = null;
public XmlFile(String path) {
xmlPath = path;
Assert.assertNotNull(xmlPath);
xmlFileLoader = new XMLFileLoaderPath();
xmlFileLoader.setXmlPath(xmlPath);
}
public void init(String xmlPath, String propertyName) {
Assert.assertNotNull(xmlPath);
Assert.assertNotNull(propertyName);
BufferedWriter bf = null;
try {
bf = new BufferedWriter(new FileWriter(new File(xmlPath)));
bf.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
bf.write("<" + propertyName + ">\r\n");
bf.write("</" + propertyName + ">");
bf.flush();
} catch (IOException e) {
logger.error(e.getMessage(), e);
Assert.fail();
} finally {
if (null != bf) {
try {
bf.close();
} catch (IOException e) {
logger.error(e.getMessage(), e);
Assert.fail();
}
}
}
}
private void initCluster() {
String path = this.xmlPath + System.getProperty("file.separator") + "cluster.xml";
init(path, "clusters");
ClusterDAOImple clusterDAO = new ClusterDAOImple();
clusterDAO.setXmlFileLoader(xmlFileLoader);
try {
clusterDAO.afterPropertiesSet();
} catch (Exception e) {
logger.error(e.getMessage(), e);
Assert.fail();
}
ClusterDO cluster = new ClusterDO();
cluster.setDeployContact("utest");
cluster.setDeployDesc("utest");
cluster.setMaintContact("utest");
cluster.setName("cluster");
cluster.setOnlineTime("2011-01-01");
clusterDAO.addCluster(cluster);
}
private void initCobar() {
String path = this.xmlPath + System.getProperty("file.separator") + "cobar.xml";
init(path, "cobars");
CobarDAOImple cobarDAO = new CobarDAOImple();
cobarDAO.setXmlFileLoader(xmlFileLoader);
try {
cobarDAO.afterPropertiesSet();
} catch (Exception e) {
logger.error(e.getMessage(), e);
Assert.fail();
}
CobarDO cobar = new CobarDO();
cobar.setClusterId(1);
cobar.setHost("10.20.10.100");
cobar.setName("cobar");
cobar.setPassword("");
cobar.setPort(9066);
cobar.setStatus("Active");
cobar.setTime_diff("no");
cobar.setUser("test");
cobarDAO.addCobar(cobar);
}
private void initUser() {
String path = this.xmlPath + System.getProperty("file.separator") + "user.xml";
init(path, "users");
UserDAOImple userDAO = new UserDAOImple();
userDAO.setXmlFileLoader(xmlFileLoader);
try {
userDAO.afterPropertiesSet();
} catch (Exception e) {
logger.error(e.getMessage(), e);
Assert.fail();
}
UserDO user = new UserDO();
user.setPassword("utest");
user.setRealname("utest");
user.setStatus("Normal");
user.setUser_role("SystemAdmin");
user.setUsername("utest");
userDAO.addUser(user);
}
private void initProperty() {
String path = this.xmlPath + System.getProperty("file.separator") + "property.xml";
init(path, "pro");
PropertyDAOImple propertyDAO = new PropertyDAOImple();
propertyDAO.setXmlFileLoader(xmlFileLoader);
try {
propertyDAO.afterPropertiesSet();
} catch (Exception e) {
logger.error(e.getMessage(), e);
Assert.fail();
}
propertyDAO.addTime(1);
}
public void initData() {
lock.lock();
try {
initCluster();
initCobar();
initUser();
initProperty();
} finally {
lock.unlock();
}
}
public void delete() {
File xmlFolder = null;
lock.lock();
try {
if (null != xmlPath) {
xmlFolder = new File(xmlPath);
if (!deleteFile(xmlFolder)) {
Assert.fail();
}
}
} finally {
lock.unlock();
}
}
public boolean deleteFile(File file) {
boolean success = true;
String filePath = file.getPath();
if (file.isDirectory()) {
String[] children = file.list();
if ((null != children) && (children.length > 0)) {
for (String child : children) {
String childFilePath = filePath + System.getProperty("file.separator") + child;
File childFile = new File(childFilePath);
if (!(deleteFile(childFile))) {
success = false;
}
}
}
}
if (success && file.delete()) {
success = true;
} else {
logger.error(filePath + " delete error");
success = false;
}
return success;
}
}