package com.chinaece.gaia.gui; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; import android.os.AsyncTask; import android.os.Bundle; import android.text.InputType; import android.text.Layout; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.ScrollView; import android.widget.Toast; import com.chinaece.gaia.R; import com.chinaece.gaia.db.DataStorage; import com.chinaece.gaia.gui.FlowPathActivity.SubmitTask; import com.chinaece.gaia.http.OAHttpApi; import com.chinaece.gaia.types.DocumentType; import com.chinaece.gaia.types.documentitem.BranchType; import com.chinaece.gaia.types.documentitem.ItemType; public class DocumentActivity extends Activity { private URL formatUrl; private String docid, formid, appid, token, str="",appname; private LinearLayout linearLayout; private DocumentType document; private boolean isNormal = true, isOpinion = false; private HashMap<EditText, AlertDialog> infoMap = new HashMap<EditText, AlertDialog>(); private static final int Menu_NORMAL = 1; private static final int Menu_EXIT_OPINION = 2; private static final int Menu_OPINION = 3; @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(Menu_NORMAL, Menu.FIRST + 1, 1, "保存").setIcon( android.R.drawable.ic_menu_save); menu.add(Menu_NORMAL,Menu.FIRST+2,1,"提交").setIcon(android.R.drawable.ic_menu_send); // // // menu.add(Menu_OPINION, Menu.FIRST + 1, 1, "保存").setIcon( // android.R.drawable.ic_menu_save); // menu.add(Menu_OPINION,Menu.FIRST+2,1,"提交").setIcon(android.R.drawable.ic_menu_send); // menu.add(Menu_OPINION,Menu.FIRST+3,1,"填写意见").setIcon(android.R.drawable.ic_menu_edit); // // // menu.add(Menu_EXIT_OPINION,Menu.FIRST+4,1,"退出编辑").setIcon(android.R.drawable.ic_menu_save); return true; } // @Override // public boolean onPrepareOptionsMenu(Menu menu) { // if(isNormal){ // menu.setGroupVisible(Menu_NORMAL, true); // menu.setGroupVisible(Menu_EXIT_OPINION, false); // menu.setGroupVisible(Menu_OPINION, false); // } // else if(isOpinion){ // menu.setGroupVisible(Menu_NORMAL, false); // menu.setGroupVisible(Menu_EXIT_OPINION, true); // menu.setGroupVisible(Menu_OPINION, false); // } // else{ // menu.setGroupVisible(Menu_NORMAL, false); // menu.setGroupVisible(Menu_EXIT_OPINION, false); // menu.setGroupVisible(Menu_OPINION, true); // } // return super.onPrepareOptionsMenu(menu); // } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case Menu.FIRST + 1: case Menu.FIRST + 2: JSONObject saveParams = new JSONObject(); JSONObject fields = new JSONObject(); for (ItemType docItem : document.getItems()) { if (docItem != null) if(docItem.isChanged()){ try { fields.put(URLEncoder.encode(docItem.getName().toString(),"UTF-8"), URLEncoder.encode(docItem.getInstanceValue(),"UTF-8")); } catch (Exception e) { e.printStackTrace(); } } } try { saveParams.put("version", document.getVersion()); saveParams.put("docid", docid); saveParams.put("appid", appid); saveParams.put("fields", fields); } catch (JSONException e) { e.printStackTrace(); } SaveTask savetask = new SaveTask(item.getItemId() == Menu.FIRST + 1?false:true); savetask.execute(formatUrl.toString(), token.toString(), saveParams.toString()); break; // case Menu.FIRST+3: // isOpinion = true; // for(int i = 0;i<linearLayout.getChildCount();i++){ // View v = linearLayout.getChildAt(i); // if(v instanceof EditText && ((EditText) v).getInputType()== (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE) ){ // v.setBackgroundColor(Color.GRAY); // getDialog((EditText) v); // v.setOnLongClickListener(new OnLongClickListener() { // // @Override // public boolean onLongClick(View v) { // getDialog((EditText) v).show(); // return false; // } // }); // } // } // break; // case Menu.FIRST+4: // isOpinion = false; // for(EditText edit :infoMap.keySet()){ // edit.setBackgroundColor(Color.WHITE); // edit.setOnClickListener(null); // } // break; } return false; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ScrollView scrollView = new ScrollView(getApplicationContext()); linearLayout = new LinearLayout(getApplicationContext()); linearLayout.setOrientation(LinearLayout.VERTICAL); linearLayout.setBackgroundResource(R.drawable.documentblack); scrollView.addView(linearLayout); setContentView(scrollView); try { token = DataStorage.properties.getProperty("token"); formatUrl = new URL(DataStorage.properties.getProperty("url")); JSONObject document = new JSONObject(); ApiTask task = new ApiTask(); docid = getIntent().getExtras().getString("docid"); formid = getIntent().getExtras().getString("formid"); appid = getIntent().getExtras().getString("appid"); appname = getIntent().getExtras().getString("summary"); try { document.put("docid", docid); document.put("formid", formid); document.put("appid", appid); } catch (JSONException e) { e.printStackTrace(); } task.execute(formatUrl.toString(), token.toString(), document.toString()); } catch (MalformedURLException e) { e.printStackTrace(); } } private AlertDialog getDialog(final EditText edit){ if(infoMap.containsKey(edit)) return infoMap.get(edit); LinearLayout lin = new LinearLayout(getApplicationContext()); lin.setOrientation(LinearLayout.VERTICAL); final EditText info = new EditText(getApplicationContext()); info.setMinLines(3); final RadioGroup rg = new RadioGroup(getApplicationContext()); final RadioButton rb1 = new RadioButton(getApplicationContext()); rb1.setText("已阅"); final RadioButton rb2 = new RadioButton(getApplicationContext()); rb2.setText("同意"); final RadioButton rb3 = new RadioButton(getApplicationContext()); rb3.setText("不同意"); rg.addView(rb1); rg.addView(rb2); rg.addView(rb3); lin.addView(info); lin.addView(rg); rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if(checkedId == rb1.getId()){ str = rb1.getText().toString(); info.setText(str); } if(checkedId == rb2.getId()){ str = rb2.getText().toString(); info.setText(str); } if(checkedId == rb3.getId()){ str = rb3.getText().toString(); info.setText(str); } } }); AlertDialog.Builder alertBuilder = new AlertDialog.Builder(DocumentActivity.this); alertBuilder.setTitle("请输入审批意见"); alertBuilder.setView(lin); alertBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // if(str.equals("")){ // Toast.makeText(getApplicationContext(), "请选择意见", Toast.LENGTH_SHORT).show(); // } // else{ if(info.getTag() == null) info.setTag(edit.getText()); if(info.getText().toString().trim().equals("")){ edit.setText(info.getTag().toString()); return; } StringBuffer sb = new StringBuffer(); System.err.println(str); SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sb.append(info.getTag().toString()); sb.append("\n"); sb.append(info.getText().toString()); sb.append(" "); sb.append(DataStorage.properties.getProperty("name")); sb.append(" "); sb.append(date.format(new Date())); edit.setText(sb.toString()); str = ""; // } } }); alertBuilder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); AlertDialog dialog = alertBuilder.create(); infoMap.put(edit, dialog); return dialog; } class ApiTask extends AsyncTask<String, Integer, DocumentType> { private ProgressDialog dialog; @Override protected void onPreExecute() { dialog = ProgressDialog.show(DocumentActivity.this, "请稍等...", "正在初始化..."); } @Override protected DocumentType doInBackground(String... params) { OAHttpApi OaApi = new OAHttpApi(params[0]); DocumentType document = OaApi.getDocument(params[1], params[2]); return document; } @Override protected void onPostExecute(DocumentType document) { dialog.dismiss(); if(document == null){ Toast.makeText(getApplicationContext(), "加载失败,请重试。", Toast.LENGTH_SHORT).show(); return; } DocumentActivity.this.document = document; try { for (ItemType item : document.getItems()) { if (item!=null){ linearLayout.addView(item.getMappingInstance(DocumentActivity.this)); if(item.getName() != null && item.getName().toLowerCase().trim().equals("processview")) isNormal = false; } } } catch (JSONException e) { e.printStackTrace(); } for(int i = 0;i<linearLayout.getChildCount();i++){ View v = linearLayout.getChildAt(i); if(v instanceof EditText && ((EditText) v).getInputType()== (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE) ){ getDialog((EditText) v); v.setOnClickListener(null); v.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { getDialog((EditText) v).show(); return false; } }); } } } } class SaveTask extends AsyncTask<String, Integer, Boolean> { private ProgressDialog dialog; private boolean isJump = false; public SaveTask(boolean isJump){ this.isJump = isJump; } @Override protected void onPreExecute() { dialog = ProgressDialog.show(DocumentActivity.this, "请稍等...", "正在保存文档..."); } @Override protected Boolean doInBackground(String... params) { OAHttpApi OaApi = new OAHttpApi(params[0]); Boolean flag = OaApi.saveDocumnet(params[1], params[2]); return flag; } @Override protected void onPostExecute(Boolean flag) { if(flag){ document.setVersion(document.getVersion()+1); if(isJump){ if(document.getFlowPath() == null){ Toast.makeText(getApplicationContext(), "没有提交路径,请联系管理员", Toast.LENGTH_SHORT).show(); } else{ if(document.getFlowPath().size() == 1 && document.getFlowPath().get(0).getPossibleValue().size()== 0){ for(BranchType bundle:document.getFlowPath()){ if(bundle.getMode()==0){ JSONObject submit = new JSONObject(); JSONArray submitTo = new JSONArray(); JSONObject sub = new JSONObject(); String currnodeid = document.getCurrNodeid(); int version = document.getVersion(); try { sub.put("nodeid",bundle.getPathid().toString()); sub.put("isToPerson", "false"); sub.put("userids", "[]"); submitTo.put(sub); submit.put("version", version); submit.put("docid", docid); submit.put("appid", appid); submit.put("currnodeid", currnodeid); JSONArray ja = new JSONArray(); ja.put(bundle.getPathid().toString()); submit.put("nextids",ja ); submit.put("flowtype", bundle.getFlowtype().toString()); submit.put("submitto", submitTo.toString()); String token = DataStorage.properties.getProperty("token"); URL formatUrl = new URL(DataStorage.properties.getProperty("url")); SubmitTask submittask = new SubmitTask(); submittask.execute(formatUrl.toString(), token.toString(), submit.toString()); System.err.println(submit.toString()); } catch (JSONException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } } else { JSONObject submit = new JSONObject(); String currnodeid = document.getCurrNodeid(); int version = document.getVersion(); try { submit.put("version", version); submit.put("docid", docid); submit.put("appid", appid); submit.put("currnodeid", currnodeid); JSONArray ja = new JSONArray(); ja.put(bundle.getPathid().toString()); submit.put("nextids",ja ); submit.put("flowtype", bundle.getFlowtype().toString()); submit.put("submitto", ""); System.err.println(submit.toString()); String token = DataStorage.properties.getProperty("token"); URL formatUrl = new URL(DataStorage.properties.getProperty("url")); SubmitTask submittask = new SubmitTask(); submittask.execute(formatUrl.toString(), token.toString(), submit.toString()); } catch (JSONException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } } } } else{ Bundle bundle = new Bundle(); bundle.putSerializable("branches", document.getFlowPath()); bundle.putString("currnodeid", document.getCurrNodeid()); bundle.putString("docid", docid); bundle.putString("appid", appid); bundle.putString("appname", appname); bundle.putInt("version", document.getVersion()); Intent intent = new Intent(DocumentActivity.this, FlowPathActivity.class); intent.putExtras(bundle); startActivity(intent); DocumentActivity.this.finish(); } } } else{ Toast.makeText(getApplicationContext(), "保存成功", Toast.LENGTH_LONG).show(); } } else { Toast.makeText(getApplicationContext(), "保存失败", Toast.LENGTH_LONG).show(); } dialog.dismiss(); } } class SubmitTask extends AsyncTask<String, Integer, Boolean> { private ProgressDialog dialog; @Override protected void onPreExecute() { dialog = ProgressDialog.show(DocumentActivity.this, "请稍等...", "正在提交..."); } @Override protected Boolean doInBackground(String... params) { OAHttpApi OaApi = new OAHttpApi(params[0]); Boolean flag = OaApi.submitDocumnet(params[1], params[2]); return flag; } @Override protected void onPostExecute(Boolean flag) { dialog.dismiss(); if(flag){ Intent intent = new Intent(DocumentActivity.this,PendingsActivity.class); Bundle bundle = new Bundle(); bundle.putBoolean("flag", true); bundle.putString("appname", appname); intent.putExtras(bundle); startActivity(intent); Intent intent1 = new Intent(DocumentActivity.this,PendingsActivity.class); startActivity(intent1); DocumentActivity.this.finish(); Toast.makeText(getApplicationContext(), "提交成功", Toast.LENGTH_SHORT).show(); } else{ Toast.makeText(getApplicationContext(), "提交失败", Toast.LENGTH_LONG).show(); } } } @Override protected void onDestroy() { if(infoMap!=null) infoMap.clear(); if(document!=null) document.getItems().clear(); super.onDestroy(); } public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { DocumentActivity.this.finish(); // Intent intent = new Intent(DocumentActivity.this,PendingsActivity.class); // startActivity(intent); return true; } return super.onKeyDown(keyCode, event); } }