de.hshannover.f4.trust.ironcontrol.view.AdvancedRequestFragment.java Source code

Java tutorial

Introduction

Here is the source code for de.hshannover.f4.trust.ironcontrol.view.AdvancedRequestFragment.java

Source

/*
 * #%L
 * =====================================================
 *   _____                _     ____  _   _       _   _
 *  |_   _|_ __ _   _ ___| |_  / __ \| | | | ___ | | | |
 *    | | | '__| | | / __| __|/ / _` | |_| |/ __|| |_| |
 *    | | | |  | |_| \__ \ |_| | (_| |  _  |\__ \|  _  |
 *    |_| |_|   \__,_|___/\__|\ \__,_|_| |_||___/|_| |_|
 *                             \____/
 * 
 * =====================================================
 * 
 * Hochschule Hannover
 * (University of Applied Sciences and Arts, Hannover)
 * Faculty IV, Dept. of Computer Science
 * Ricklinger Stadtweg 118, 30459 Hannover, Germany
 * 
 * Email: trust@f4-i.fh-hannover.de
 * Website: http://trust.f4.hs-hannover.de/
 * 
 * This file is part of ironcontrol for android, version 1.0.2, implemented by the Trust@HsH research group at the Hochschule Hannover.
 * %%
 * Copyright (C) 2013 - 2015 Trust@HsH
 * %%
 * 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.
 * #L%
 */
package de.hshannover.f4.trust.ironcontrol.view;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import de.hshannover.f4.trust.ironcontrol.R;
import de.hshannover.f4.trust.ironcontrol.asynctask.SearchTask;
import de.hshannover.f4.trust.ironcontrol.asynctask.SubscriptionTask;
import de.hshannover.f4.trust.ironcontrol.database.DBContentProvider;
import de.hshannover.f4.trust.ironcontrol.database.entities.Requests;
import de.hshannover.f4.trust.ironcontrol.logic.data.Operation;
import de.hshannover.f4.trust.ironcontrol.view.util.PromptSpinnerAdapter;

public class AdvancedRequestFragment extends Fragment {

    private static final CharSequence START_IDENTIFIER_SPINNER_PROMPT = "Start Identifier";

    private boolean[] terminalIdentifierTypes = new boolean[5];
    private Spinner sStartIdentifier;
    private EditText etStartIdentifier, etName, etMatchLinks, etResultFilter;
    private View mRoot;
    private TextView tvMaxDepth, tvMaxSize;
    private SeekBar sbMaxDepth, sbMaxSize;
    private ListView lvTerminalType;
    private PromptSpinnerAdapter identifier1Adapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        mRoot = inflater.inflate(R.layout.fragment_advanced_request, null);

        etName = (EditText) mRoot.findViewById(R.id.etName);
        sStartIdentifier = (Spinner) mRoot.findViewById(R.id.sIdentifier1);
        etStartIdentifier = (EditText) mRoot.findViewById(R.id.etIdentifier1);
        tvMaxDepth = (TextView) mRoot.findViewById(R.id.textViewMaxDepth);
        etMatchLinks = (EditText) mRoot.findViewById(R.id.editTextMatchLinks);
        etResultFilter = (EditText) mRoot.findViewById(R.id.editTextResultFilter);
        tvMaxSize = (TextView) mRoot.findViewById(R.id.textViewMaxSize);
        sbMaxDepth = (SeekBar) mRoot.findViewById(R.id.seekBarMaxDepth);
        sbMaxSize = (SeekBar) mRoot.findViewById(R.id.seekBarMaxSize);
        lvTerminalType = (ListView) mRoot.findViewById(R.id.listViewTerminalType);
        configureView();
        lvTerminalType.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                createDialog().show();
            }
        });
        return mRoot;
    }

    private void configureListEntries() {
        identifier1Adapter = new PromptSpinnerAdapter(getActivity(), START_IDENTIFIER_SPINNER_PROMPT,
                R.array.identifier1_list);

        sStartIdentifier.setAdapter(identifier1Adapter);
    }

    private void addSpinnerListener() {
        sStartIdentifier.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                etStartIdentifier.setHint((CharSequence) sStartIdentifier.getSelectedItem());
            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
            }
        });
    }

    private void addSeekBarListener() {
        sbMaxDepth.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                tvMaxDepth.setText("" + progress);
            }
        });

        sbMaxSize.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
            }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                tvMaxSize.setText("" + progress);
            }
        });
    }

    private void configureView() {
        configureListEntries();
        addSpinnerListener();
        addSeekBarListener();
    }

    private Dialog createDialog() {
        return new AlertDialog.Builder(getActivity()).setTitle(R.string.string_terminal_identifier_type)
                .setMultiChoiceItems(R.array.identifier1_list, terminalIdentifierTypes,
                        new DialogSelectionClickHandler())
                .setPositiveButton(R.string.ok, new DialogButtonClickHandler())
                .setNegativeButton(R.string.string_abort, new DialogButtonClickHandler()).create();
    }

    public class DialogSelectionClickHandler implements DialogInterface.OnMultiChoiceClickListener {
        @Override
        public void onClick(DialogInterface dialog, int clicked, boolean selected) {
            Log.i("ME", R.array.identifier1_list + " selected: " + selected);
        }
    }

    public class DialogButtonClickHandler implements DialogInterface.OnClickListener {
        @Override
        public void onClick(DialogInterface dialog, int clicked) {
            switch (clicked) {
            case DialogInterface.BUTTON_POSITIVE:
                printTerminalIdentifierType();
                break;
            }
        }
    }

    protected void printTerminalIdentifierType() {
        for (int i = 0; i < 5; i++) {
            Log.i("ME", i + " selected: " + terminalIdentifierTypes[i]);
        }
    }

    public boolean[] getTerminalIdentifierTypes() {
        return terminalIdentifierTypes;
    }

    public void search(View view) {
        String name = etName.getText().toString();
        String identifier = sStartIdentifier.getSelectedItem().toString();
        String identifierValue = etStartIdentifier.getText().toString();
        String matchLinks = etMatchLinks.getText().toString();
        String resultFilter = etResultFilter.getText().toString();
        int maxDepth = sbMaxDepth.getProgress();
        int maxSize = sbMaxSize.getProgress() * 1000;
        String terminalIdentifiers = terminalIdentifierTypesToString();

        String id = saveSearch(name);

        if (matchLinks.equals("")) {
            matchLinks = null;
        }

        if (resultFilter.equals("")) {
            resultFilter = null;
        }

        if (terminalIdentifiers.equals("")) {
            terminalIdentifiers = null;
        }

        if (id != null) {

            new SearchTask(name, identifier, identifierValue, matchLinks, resultFilter, maxDepth, maxSize,
                    terminalIdentifiers, getActivity(), SearchFragmentActivity.MESSAGESEARCH).execute();

        } else {

            Toast.makeText(getActivity(), "no search", Toast.LENGTH_SHORT).show();

        }
    }

    private String terminalIdentifierTypesToString() {

        String[] identifiers = { "access-request", "ip-address", "mac-address", "device", "identity" };
        String terminalIdentifier = "";

        boolean first = true;
        for (int i = 0; i < identifiers.length; i++) {
            if (terminalIdentifierTypes[i]) {
                if (first) {
                    terminalIdentifier += identifiers[i];
                    first = false;
                    continue;
                }
                terminalIdentifier += "," + identifiers[i];
            }
        }
        System.out.println("Terminal Identifier  =  " + terminalIdentifier);
        return terminalIdentifier;
    }

    public String saveSearch(String savedName) {
        if (!isNameValid(savedName)) {
            return null;
        }

        String id = getExistSearchId(savedName);

        if (id != null) {
            return id;
        }

        String startIdentifier = sStartIdentifier.getSelectedItem().toString();
        String startIdentifierValue = etStartIdentifier.getText().toString();
        String matchLinks = etMatchLinks.getText().toString();
        String resultFilter = etResultFilter.getText().toString();
        int maxDepth = sbMaxDepth.getProgress();
        int maxSize = sbMaxSize.getProgress() * 1000;
        String terminalIdentifiers = terminalIdentifierTypesToString();

        ContentValues publishValues = new ContentValues();
        publishValues.put(Requests.COLUMN_NAME, savedName);
        publishValues.put(Requests.COLUMN_IDENTIFIER1, startIdentifier);
        publishValues.put(Requests.COLUMN_IDENTIFIER1_Value, startIdentifierValue);
        publishValues.put(Requests.COLUMN_MATCH_LINKS, matchLinks);
        publishValues.put(Requests.COLUMN_RESULT_FILTER, resultFilter);
        publishValues.put(Requests.COLUMN_MAX_DEPTH, maxDepth);
        publishValues.put(Requests.COLUMN_MAX_SITZ, maxSize);
        publishValues.put(Requests.COLUMN_TERMINAL_IDENTIFIER_TYPES, terminalIdentifiers);

        Uri returnUri = getActivity().getContentResolver().insert(DBContentProvider.SEARCH_URI, publishValues);
        return returnUri.getLastPathSegment();
    }

    public Dialog createSearchSaveDialog() {
        AlertDialog.Builder publishSaveDialog = new AlertDialog.Builder(getActivity());

        publishSaveDialog.setTitle(R.string.save);
        publishSaveDialog.setMessage(R.string.saving_search_message);

        final EditText input = new EditText(getActivity());
        input.setText(etName.getText().toString());
        publishSaveDialog.setView(input);

        publishSaveDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int whichButton) {
                if (saveSearch(input.getText().toString()) == null) {
                    Toast.makeText(getActivity(), "not saved", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(getActivity(), "Search: " + input.getText().toString() + " is saved",
                            Toast.LENGTH_SHORT).show();
                }

            }
        });

        publishSaveDialog.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int whichButton) {
            }
        });

        return publishSaveDialog.create();
    }

    private String getExistSearchId(String savedName) {
        String selectionArgs[] = { savedName };
        String selection = Requests.COLUMN_NAME + "=?";

        Cursor cursor = getActivity().getContentResolver().query(DBContentProvider.SEARCH_URI, null, selection,
                selectionArgs, null);

        if (cursor.getCount() == 1) {
            cursor.moveToFirst();
            String id = cursor.getString(cursor.getColumnIndex(Requests.COLUMN_ID));
            cursor.close();
            return id;
        }
        cursor.close();
        return null;
    }

    private boolean isNameValid(String savedName) {
        if (savedName.equals("")) {
            Toast.makeText(getActivity().getBaseContext(), "empty name", Toast.LENGTH_SHORT).show();
            return false;
        }
        return true;
    }

    public void subscription(View view) {
        String name = etName.getText().toString();
        String identifier = sStartIdentifier.getSelectedItem().toString();
        String identifierValue = etStartIdentifier.getText().toString();
        String matchLinks = etMatchLinks.getText().toString();
        String resultFilter = etResultFilter.getText().toString();
        int maxDepth = sbMaxDepth.getProgress();
        int maxSize = sbMaxSize.getProgress() * 1000;
        String terminalIdentifiers = terminalIdentifierTypesToString();

        String id = saveSubscribtion(name);

        if (matchLinks.equals("")) {
            matchLinks = null;
        }

        if (resultFilter.equals("")) {
            resultFilter = null;
        }

        if (terminalIdentifiers.equals("")) {
            terminalIdentifiers = null;
        }

        if (id != null) {

            new SubscriptionTask(getActivity(), name, identifier, identifierValue, maxDepth, maxSize,
                    terminalIdentifiers, resultFilter, matchLinks, id, Operation.UPDATE).execute();

        } else {

            Toast.makeText(getActivity(), "no subscription", Toast.LENGTH_SHORT).show();

        }
    }

    public String saveSubscribtion(String savedName) {
        if (!isNameValid(savedName)) {
            return null;
        }

        String id = getExistSubscriptionId(savedName);

        if (id != null) {
            return id;
        }

        String startIdentifier = sStartIdentifier.getSelectedItem().toString();
        String startIdentifierValue = etStartIdentifier.getText().toString();
        String matchLinks = etMatchLinks.getText().toString();
        String resultFilter = etResultFilter.getText().toString();
        int maxDepth = sbMaxDepth.getProgress();
        int maxSize = sbMaxSize.getProgress() * 1000;
        String terminalIdentifiers = terminalIdentifierTypesToString();

        ContentValues publishValues = new ContentValues();
        publishValues.put(Requests.COLUMN_NAME, savedName);
        publishValues.put(Requests.COLUMN_IDENTIFIER1, startIdentifier);
        publishValues.put(Requests.COLUMN_IDENTIFIER1_Value, startIdentifierValue);
        publishValues.put(Requests.COLUMN_MATCH_LINKS, matchLinks);
        publishValues.put(Requests.COLUMN_RESULT_FILTER, resultFilter);
        publishValues.put(Requests.COLUMN_MAX_DEPTH, maxDepth);
        publishValues.put(Requests.COLUMN_MAX_SITZ, maxSize);
        publishValues.put(Requests.COLUMN_TERMINAL_IDENTIFIER_TYPES, terminalIdentifiers);

        Uri returnUri = getActivity().getContentResolver().insert(DBContentProvider.SUBSCRIPTION_URI,
                publishValues);
        return returnUri.getLastPathSegment();

    }

    public Dialog createSubscribeSaveDialog() {
        AlertDialog.Builder publishSaveDialog = new AlertDialog.Builder(getActivity());

        publishSaveDialog.setTitle(R.string.save);
        publishSaveDialog.setMessage(R.string.saving_subscribe_message);

        final EditText input = new EditText(getActivity());
        input.setText(etName.getText().toString());
        publishSaveDialog.setView(input);

        publishSaveDialog.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int whichButton) {
                if (saveSubscribtion(input.getText().toString()) == null) {
                    Toast.makeText(getActivity(), "not saved", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(getActivity(), "Subscription: " + input.getText().toString() + " is saved",
                            Toast.LENGTH_SHORT).show();
                }
            }
        });

        publishSaveDialog.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int whichButton) {
            }
        });

        return publishSaveDialog.create();
    }

    private String getExistSubscriptionId(String savedName) {
        String selectionArgs[] = { savedName };
        String selection = Requests.COLUMN_NAME + "=?";

        Cursor cursor = getActivity().getContentResolver().query(DBContentProvider.SUBSCRIPTION_URI, null,
                selection, selectionArgs, null);

        if (cursor.getCount() == 1) {
            cursor.moveToFirst();
            String id = cursor.getString(cursor.getColumnIndex(Requests.COLUMN_ID));
            cursor.close();
            return id;
        }
        cursor.close();
        return null;
    }

}