ex
Fork of mbed-os-example-mbed5-blinky by
dcs-sdk-java-master/app/src/main/java/com/baidu/duer/dcs/androidsystemimpl/alert/AlertsFileDataStoreImpl.java
- Committer:
- TMBOY
- Date:
- 2017-07-18
- Revision:
- 45:2aa9f933c8d2
File content as of revision 45:2aa9f933c8d2:
/*
* Copyright (c) 2017 Baidu, Inc. All Rights Reserved.
*
* 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.baidu.duer.dcs.androidsystemimpl.alert;
import android.os.Handler;
import com.baidu.duer.dcs.devicemodule.alerts.message.Alert;
import com.baidu.duer.dcs.systeminterface.IAlertsDataStore;
import com.baidu.duer.dcs.util.CommonUtil;
import com.baidu.duer.dcs.util.FileUtil;
import com.baidu.duer.dcs.util.LogUtil;
import com.baidu.duer.dcs.util.ObjectMapperUtil;
import org.codehaus.jackson.map.ObjectReader;
import org.codehaus.jackson.map.ObjectWriter;
import org.codehaus.jackson.type.TypeReference;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 持久化alert数据到文件-android中实现
* <p>
* Created by guxiuzhong@baidu.com on 2017/5/18.
*/
public class AlertsFileDataStoreImpl implements IAlertsDataStore {
private static final String TAG = AlertsFileDataStoreImpl.class.getSimpleName();
private static final ExecutorService mExecutor = Executors.newSingleThreadExecutor();
private Handler mHandler = new Handler();
public AlertsFileDataStoreImpl() {
}
@Override
public void readFromDisk(final IAlertsDataStore.ReadResultListener listener) {
mExecutor.execute(new Runnable() {
@Override
public void run() {
FileReader fis;
BufferedReader br = null;
ObjectReader reader = ObjectMapperUtil.instance()
.getObjectReader()
.withType(new TypeReference<List<Alert>>() {
});
try {
File file = FileUtil.getAlarmFile();
if (file == null) {
postReadFailed(listener, "create file failed file is null");
return;
}
fis = new FileReader(file);
br = new BufferedReader(fis);
List<Alert> alerts = reader.readValue(br);
postReadSucceed(listener, alerts);
} catch (final FileNotFoundException e) {
postReadFailed(listener, "Failed to load alerts from disk.");
} catch (IOException e) {
postReadFailed(listener, e.getMessage());
} finally {
CommonUtil.closeQuietly(br);
}
}
});
}
private void postReadFailed(final IAlertsDataStore.ReadResultListener listener, final String errorMessage) {
if (listener != null) {
mHandler.post(new Runnable() {
@Override
public void run() {
listener.onFailed(errorMessage);
}
});
}
}
private void postReadSucceed(final IAlertsDataStore.ReadResultListener listener, final List<Alert> alerts) {
if (listener != null) {
mHandler.post(new Runnable() {
@Override
public void run() {
listener.onSucceed(alerts);
}
});
}
}
@Override
public void writeToDisk(final List<Alert> alerts, final IAlertsDataStore.WriteResultListener listener) {
mExecutor.execute(new Runnable() {
@Override
public void run() {
ObjectWriter writer = ObjectMapperUtil.instance().getObjectWriter();
PrintWriter out = null;
try {
File file = FileUtil.getAlarmFile();
if (file == null) {
postWriteFailed(listener, "create file failed file is null ");
return;
}
out = new PrintWriter(file);
out.print(writer.writeValueAsString(alerts));
out.flush();
LogUtil.e(TAG, "start postWriteSucceed");
postWriteSucceed(listener);
} catch (IOException e) {
LogUtil.e(TAG, "Failed to write to disk", e);
postWriteFailed(listener, "Failed to write to disk,error:" + e.getMessage());
} finally {
CommonUtil.closeQuietly(out);
}
}
});
}
private void postWriteFailed(final IAlertsDataStore.WriteResultListener listener, final String errorMessage) {
if (listener != null) {
mHandler.post(new Runnable() {
@Override
public void run() {
listener.onFailed(errorMessage);
}
});
}
}
private void postWriteSucceed(final IAlertsDataStore.WriteResultListener listener) {
if (listener != null) {
mHandler.post(new Runnable() {
@Override
public void run() {
listener.onSucceed();
}
});
}
}
}
