/*
* Copyright � 2016 TIBCO Software,Inc.All rights reserved.
* http://community.jaspersoft.com/project/jaspermobile-android
*
* Unless you have purchased a commercial license agreement from TIBCO Jaspersoft,
* the following license terms apply:
*
* This program is part of TIBCO Jaspersoft Mobile for Android.
*
* TIBCO Jaspersoft Mobile is free software:you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation,either version 3of the License,or
* (at your option)any later version.
*
* TIBCO Jaspersoft Mobile is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY;without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with TIBCO Jaspersoft Mobile for Android.If not,see
* <http://www.gnu.org/licenses/lgpl>.
*/
package com.jaspersoft.android.jaspermobile.activities.info.fragments;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import com.jaspersoft.android.jaspermobile.Analytics;
import com.jaspersoft.android.jaspermobile.R;
import com.jaspersoft.android.jaspermobile.activities.save.SaveReportActivity_;
import com.jaspersoft.android.jaspermobile.dialog.ProgressDialogFragment;
import com.jaspersoft.android.jaspermobile.dialog.ReportOptionsFragmentDialog;
import com.jaspersoft.android.jaspermobile.domain.LoadOptionParamsRequest;
import com.jaspersoft.android.jaspermobile.domain.SimpleSubscriber;
import com.jaspersoft.android.jaspermobile.network.RequestExceptionHandler;
import com.jaspersoft.android.jaspermobile.ui.view.activity.schedule.NewScheduleActivity_;
import com.jaspersoft.android.jaspermobile.util.ResourceOpener;
import com.jaspersoft.android.sdk.service.data.report.option.ReportOption;
import com.jaspersoft.android.sdk.util.FileUtils;
import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.OptionsMenu;
import org.androidannotations.annotations.OptionsMenuItem;
import java.util.Set;
import rx.Subscriber;
/**
* @author Andrew Tivodar
* @since 2.2
*/
@OptionsMenu({R.menu.report_schedule, R.menu.save_item_menu, R.menu.report_options_menu})
@EFragment(R.layout.fragment_resource_info)
public class ReportInfoFragment extends ResourceInfoFragment
implements ReportOptionsFragmentDialog.ReportOptionsDialogClickListener {
@Bean
protected ResourceOpener resourceOpener;
@OptionsMenuItem(R.id.showReportOptions)
protected MenuItem reportOptions;
@OptionsMenuItem(R.id.saveAction)
protected MenuItem saveOptions;
private boolean mReportOptionsExist;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestReportOptions();
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
reportOptions.setVisible(mReportOptionsExist && mResourceLookup != null);
saveOptions.setVisible(mResourceLookup != null);
}
@OptionsItem(R.id.saveAction)
protected void saveReport() {
if (FileUtils.isExternalStorageWritable()) {
SaveReportActivity_.intent(this)
.resource(mResourceLookup)
.start();
} else {
Toast.makeText(getActivity(),
R.string.rv_t_external_storage_not_available, Toast.LENGTH_SHORT).show();
}
}
@OptionsItem(R.id.showReportOptions)
protected void showReportOptions() {
ReportOptionsFragmentDialog.createBuilder(getFragmentManager())
.setReportUri(jasperResource.getId())
.setCancelableOnTouchOutside(true)
.setTargetFragment(this)
.show();
}
@OptionsItem(R.id.newSchedule)
protected void schedule() {
NewScheduleActivity_.intent(getActivity())
.jasperResource(jasperResource)
.start();
}
@Override
public void onOptionSelected(ReportOption reportOption) {
LoadOptionParamsRequest request = new LoadOptionParamsRequest(
reportOption.getUri(),
jasperResource.getId()
);
mLoadControlsForOptionCase.execute(request, new GetInputControlsListener());
analytics.sendEvent(Analytics.EventCategory.RESOURCE.getValue(), Analytics.EventAction.OPENED.getValue(), Analytics.EventLabel.WITH_RO.getValue());
}
private void showProgressDialog() {
ProgressDialogFragment.builder(getFragmentManager())
.setLoadingMessage(R.string.loading_msg)
.show();
}
private void hideProgressDialog() {
if (ProgressDialogFragment.isVisible(getFragmentManager())) {
ProgressDialogFragment.dismiss(getFragmentManager());
}
}
private void requestReportOptions() {
if (mJasperServer.isProEdition()) {
mGetReportOptionsCase.execute(jasperResource.getId(), new GetReportOptionsListener());
}
}
private class GetInputControlsListener extends Subscriber<Void> {
@Override
public void onStart() {
showProgressDialog();
}
@Override
public void onCompleted() {
hideProgressDialog();
}
@Override
public void onError(Throwable e) {
RequestExceptionHandler.showAuthErrorIfExists(getActivity(), e);
hideProgressDialog();
}
@Override
public void onNext(Void aVoid) {
resourceOpener.openResource(ReportInfoFragment.this, mResourceLookup);
}
}
private class GetReportOptionsListener extends SimpleSubscriber<Set<ReportOption>> {
@Override
public void onNext(Set<ReportOption> options) {
mReportOptionsExist = !options.isEmpty();
getActivity().invalidateOptionsMenu();
}
}
}