text:
'''
   OpenShiftCLI class that wraps the oc commands in a subprocess
'''
# pylint: disable=too-many-lines

from __future__ import print_function
import atexit
import copy
import json
import os
import re
import shutil
import subprocess
import tempfile
# pylint: disable=import-error
try:
    import ruamel.yaml as yaml
except ImportError:
    import yaml

from ansible.module_utils.basic import AnsibleModule

# -*- -*- -*- End included fragment: lib/import.py -*- -*- -*-

# -*- -*- -*- Begin included fragment: doc/objectvalidator -*- -*- -*-

DOCUMENTATION = '''
---
module: oc_objectvalidator
short_description: Validate OpenShift objects
description:
  - Validate OpenShift objects
options:
  kubeconfig:
    description:
    - The path for the kubeconfig file to use for authentication
    required: false
    default: /etc/origin/master/admin.kubeconfig
    aliases: []
author:
- "Mo Khan <monis@redhat.com>"
extends_documentation_fragment: []
'''

EXAMPLES = '''
oc_objectvalidator:
- name: run oc_objectvalidator
  oc_objectvalidator:
  register: oc_objectvalidator
'''

# -*- -*- -*- End included fragment: doc/objectvalidator -*- -*- -*-

# -*- -*- -*- Begin included fragment: ../../lib_utils/src/class/yedit.py -*- -*- -*-
# pylint: disable=undefined-variable,missing-docstring
# noqa: E301,E302

class YeditException(Exception):
    ''' Exception class for Yedit '''
    pass

# pylint: disable=too-many-public-methods
class Yedit(object):
    ''' Class to modify yaml files '''
    re_valid_key = r"(((\[-?\d+\])|([0-9a-zA-Z%s/_-]+)).?)+$"
    re_key = r"(?:\[(-?\d+)\])|([0-9a-zA-Z%s/_-]+)"
    com_sep = set(['.', '#', '|', ':'])

    # pylint: disable=too-many-arguments
    def __init__(self,
                 filename=None,
                 content=None,
                 content_type='yaml',
                 separator='.',
                 backup=False):
        self.content = content
        self._separator = separator
        self.filename = filename
        self.__yaml_dict = content
        self.content_type = content_type
        self.backup = backup
        self.load(content_type=self.content_type)
        if self.__yaml_dict is None:
            self.__yaml_dict = {}

    @property
    def separator(self):
        ''' getter method for yaml_dict '''
        return self._separator

    @separator.setter
    def separator(self):
        ''' getter method for yaml_dict '''
        return self._separator

    @property
    def yaml_dict(self):
        ''' getter method for yaml_dict '''
        return self.__yaml_dict

    @yaml_dict.setter
    def yaml_dict(self, value):
        ''' setter method for yaml_dict '''
        self.__yaml_dict = value

    @staticmethod
    def parse_key(key, sep='.'):
        '''parse the key allowing the appropriate separator'''
        common_separators = list(Yedit.com_sep - set([sep]))
        return re.findall(Yedit.re_key % ''.join(common_separators), key)

    @staticmethod
    def valid_key(key, sep='.'):
        '''validate the incoming key'''
        common_separators = list(Yedit.com_sep - set([sep]))
        if not re.match(Yedit.re_valid_key % ''.join(common_separators), key):
            return False

        return True

    @staticmethod
    def remove_entry(data, key, sep='.'):
        ''' remove data at location key '''
        if key == '' and isinstance(data, dict):
            data.clear()
            return True
        elif key == '' and isinstance(data, list):
            del data[:]
            return True

        if not (key and Yedit.valid_key(key, sep)) and \
           isinstance(data, (list, dict)):
            return None

        key_indexes = Yedit.parse_key(key, sep)
        for arr_ind, dict_key in key_indexes[:-1]:
            if dict_key and isinstance(data, dict):
                data = data.get(dict_key, None)
            elif (arr_ind and isinstance(data, list) and
                  int(arr_ind) <= len(data) - 1):
                data = data[int(arr_ind)]
            else:
                return None

        # process last index for remove
        # expected list entry
        if key_indexes[-1][0]:
            if isinstance(data, list) and int(key_indexes[-1][0]) <= len(data) - 1:  # noqa: E501
                del data[int(key_indexes[-1][0])]
                return True

        # expected dict entry
        elif key_indexes[-1][1]:
            if isinstance(data, dict):
                del data[key_indexes[-1][1]]
                return True

    @staticmethod
    def add_entry(data, key, item=None, sep='.'):
        ''' Get an item from a dictionary with key notation a.b.c
            d = {'a': {'b': 'c'}}}
            key = a#b
            return c
        '''
        if key == '':
            pass
        elif (not (key and Yedit.valid_key(key, sep)) and
              isinstance(data, (list, dict))):
            return None

        key_indexes = Yedit.parse_key(key, sep)
        for arr_ind, dict_key in key_indexes[:-1]:
            if dict_key:
                if isinstance(data, dict) and dict_key in data and data[dict_key]:  # noqa: E501
                    data = data[dict_key]
                    continue

                elif data and not isinstance(data, dict):
                    raise YeditException("Unexpected item type found while going through key " +
                                         "path: {} (at key: {})".format(key, dict_key))

                data[dict_key] = {}
                data = data[dict_key]

            elif (arr_ind and isinstance(data, list) and
                  int(arr_ind) <= len(data) - 1):
                data = data[int(arr_ind)]
            else:
                raise YeditException("Unexpected item type found while going through key path: {}".format(key))

        if key == '':
            data = item

        # process last index for add
        # expected list entry
        elif key_indexes[-1][0] and isinstance(data, list) and int(key_indexes[-1][0]) <= len(data) - 1:  # noqa: E501
            data[int(key_indexes[-1][0])] = item

        # expected dict entry
        elif key_indexes[-1][1] and isinstance(data, dict):
            data[key_indexes[-1][1]] = item

        # didn't add/update to an existing list, nor add/update key to a dict
        # so we must have been provided some syntax like a.b.c[<int>] = "data" for a
        # non-existent array
        else:
            raise YeditException("Error adding to object at path: {}".format(key))

        return data

    @staticmethod
    def get_entry(data, key, sep='.'):
        ''' Get an item from a dictionary with key notation a.b.c
            d = {'a': {'b': 'c'}}}
            key = a.b
            return c
        '''
        if key == '':
            pass
        elif (not (key and Yedit.valid_key(key, sep)) and
              isinstance(data, (list, dict))):
            return None

        key_indexes = Yedit.parse_key(key, sep)
        for arr_ind, dict_key in key_indexes:
            if dict_key and isinstance(data, dict):
                data = data.get(dict_key, None)
            elif (arr_ind and isinstance(data, list) and
                  int(arr_ind) <= len(data) - 1):
                data = data[int(arr_ind)]
            else:
                return None

        return data

    @staticmethod
    def _write(filename, contents):
        ''' Actually write the file contents to disk. This helps with mocking. '''

        tmp_filename = filename + '.yedit'

        with open(tmp_filename, 'w') as yfd:
            yfd.write(contents)

        os.rename(tmp_filename, filename)

    def write(self):
        ''' write to file '''
        if not self.filename:
            raise YeditException('Please specify a filename.')

        if self.backup and self.file_exists():
            shutil.copy(self.filename, self.filename + '.orig')

        # Try to set format attributes if supported
        try:
            self.yaml_dict.fa.set_block_style()
        except AttributeError:
            pass

        # Try to use RoundTripDumper if supported.
        try:
            Yedit._write(self.filename, yaml.dump(self.yaml_dict, Dumper=yaml.RoundTripDumper))
        except AttributeError:
            Yedit._write(self.filename, yaml.safe_dump(self.yaml_dict, default_flow_style=False))

        return (True, self.yaml_dict)

    def read(self):
        ''' read from file '''
        # check if it exists
        if self.filename is None or not self.file_exists():
            return None

        contents = None
        with open(self.filename) as yfd:
            contents = yfd.read()

        return contents

    def file_exists(self):
        ''' return whether file exists '''
        if os.path.exists(self.filename):
            return True

        return False

    def load(self, content_type='yaml'):
        ''' return yaml file '''
        contents = self.read()

        if not contents and not self.content:
            return None

        if self.content:
            if isinstance(self.content, dict):
                self.yaml_dict = self.content
                return self.yaml_dict
            elif isinstance(self.content, str):
                contents = self.content

        # check if it is yaml
        try:
            if content_type == 'yaml' and contents:
                # Try to set format attributes if supported
                try:
                    self.yaml_dict.fa.set_block_style()
                except AttributeError:
                    pass

                # Try to use RoundTripLoader if supported.
                try:
                    self.yaml_dict = yaml.safe_load(contents, yaml.RoundTripLoader)
                except AttributeError:
                    self.yaml_dict = yaml.safe_load(contents)

                # Try to set format attributes if supported
                try:
                    self.yaml_dict.fa.set_block_style()
                except AttributeError:
                    pass

            elif content_type == 'json' and contents:
                self.yaml_dict = json.loads(contents)
        except yaml.YAMLError as err:
            # Error loading yaml or json
            raise YeditException('Problem with loading yaml file. %s' % err)

        return self.yaml_dict

    def get(self, key):
        ''' get a specified key'''
        try:
            entry = Yedit.get_entry(self.yaml_dict, key, self.separator)
        except KeyError:
            entry = None

        return entry

    def pop(self, path, key_or_item):
        ''' remove a key, value pair from a dict or an item for a list'''
        try:
            entry = Yedit.get_entry(self.yaml_dict, path, self.separator)
        except KeyError:
            entry = None

        if entry is None:
            return (False, self.yaml_dict)

        if isinstance(entry, dict):
            # AUDIT:maybe-no-member makes sense due to fuzzy types
            # pylint: disable=maybe-no-member
            if key_or_item in entry:
                entry.pop(key_or_item)
                return (True, self.yaml_dict)
            return (False, self.yaml_dict)

        elif isinstance(entry, list):
            # AUDIT:maybe-no-member makes sense due to fuzzy types
            # pylint: disable=maybe-no-member
            ind = None
            try:
                ind = entry.index(key_or_item)
            except ValueError:
                return (False, self.yaml_dict)

            entry.pop(ind)
            return (True, self.yaml_dict)

        return (False, self.yaml_dict)

    def delete(self, path):
        ''' remove path from a dict'''
        try:
            entry = Yedit.get_entry(self.yaml_dict, path, self.separator)
        except KeyError:
            entry = None

        if entry is None:
            return (False, self.yaml_dict)

        result = Yedit.remove_entry(self.yaml_dict, path, self.separator)
        if not result:
            return (False, self.yaml_dict)

        return (True, self.yaml_dict)

    def exists(self, path, value):
        ''' check if value exists at path'''
        try:
            entry = Yedit.get_entry(self.yaml_dict, path, self.separator)
        except KeyError:
            entry = None

        if isinstance(entry, list):
            if value in entry:
                return True
            return False

        elif isinstance(entry, dict):
            if isinstance(value, dict):
                rval = False
                for key, val in value.items():
                    if entry[key] != val:
                        rval = False
                        break
                else:
                    rval = True
                return rval

            return value in entry

        return entry == value

    def append(self, path, value):
        '''append value to a list'''
        try:
            entry = Yedit.get_entry(self.yaml_dict, path, self.separator)
        except KeyError:
            entry = None

        if entry is None:
            self.put(path, [])
            entry = Yedit.get_entry(self.yaml_dict, path, self.separator)
        if not isinstance(entry, list):
            return (False, self.yaml_dict)

        # AUDIT:maybe-no-member makes sense due to loading data from
        # a serialized format.
        # pylint: disable=maybe-no-member
        entry.append(value)
        return (True, self.yaml_dict)

    # pylint: disable=too-many-arguments
    def update(self, path, value, index=None, curr_value=None):
        ''' put path, value into a dict '''
        try:
            entry = Yedit.get_entry(self.yaml_dict, path, self.separator)
        except KeyError:
            entry = None

        if isinstance(entry, dict):
            # AUDIT:maybe-no-member makes sense due to fuzzy types
            # pylint: disable=maybe-no-member
            if not isinstance(value, dict):
                raise YeditException('Cannot replace key, value entry in ' +
                                     'dict with non-dict type. value=[%s] [%s]' % (value, type(value)))  # noqa: E501

            entry.update(value)
            return (True, self.yaml_dict)

        elif isinstance(entry, list):
            # AUDIT:maybe-no-member makes sense due to fuzzy types
            # pylint: disable=maybe-no-member
            ind = None
            if curr_value:
                try:
                    ind = entry.index(curr_value)
                except ValueError:
                    return (False, self.yaml_dict)

            elif index is not None:
                ind = index

            if ind is not None and entry[ind] != value:
                entry[ind] = value
                return (True, self.yaml_dict)

            # see if it exists in the list
            try:
                ind = entry.index(value)
            except ValueError:
                # doesn't exist, append it
                entry.append(value)
                return (True, self.yaml_dict)

            # already exists, return
            if ind is not None:
                return (False, self.yaml_dict)
        return (False, self.yaml_dict)

    def put(self, path, value):
        ''' put path, value into a dict '''
        try:
            entry = Yedit.get_entry(self.yaml_dict, path, self.separator)
        except KeyError:
            entry = None

        if entry == value:
            return (False, self.yaml_dict)

        # deepcopy didn't work
        # Try to use ruamel.yaml and fallback to pyyaml
        try:
            tmp_copy = yaml.load(yaml.round_trip_dump(self.yaml_dict,
                                                      default_flow_style=False),
                                 yaml.RoundTripLoader)
        except AttributeError:
            tmp_copy = copy.deepcopy(self.yaml_dict)

        # set the format attributes if available
        try:
            tmp_copy.fa.set_block_style()
        except AttributeError:
            pass

        result = Yedit.add_entry(tmp_copy, path, value, self.separator)
        if not result:
            return (False, self.yaml_dict)

        self.yaml_dict = tmp_copy

        return (True, self.yaml_dict)

    def create(self, path, value):
        ''' create a yaml file '''
        if not self.file_exists():
            # deepcopy didn't work
            # Try to use ruamel.yaml and fallback to pyyaml
            try:
                tmp_copy = yaml.load(yaml.round_trip_dump(self.yaml_dict,
                                                          default_flow_style=False),
                                     yaml.RoundTripLoader)
            except AttributeError:
                tmp_copy = copy.deepcopy(self.yaml_dict)

            # set the format attributes if available
            try:
                tmp_copy.fa.set_block_style()
            except AttributeError:
                pass

            result = Yedit.add_entry(tmp_copy, path, value, self.separator)
            if result:
                self.yaml_dict = tmp_copy
                return (True, self.yaml_dict)

        return (False, self.yaml_dict)

    @staticmethod
    def get_curr_value(invalue, val_type):
        '''return the current value'''
        if invalue is None:
            return None

        curr_value = invalue
        if val_type == 'yaml':
            curr_value = yaml.load(invalue)
        elif val_type == 'json':
            curr_value = json.loads(invalue)

        return curr_value

    @staticmethod
    def parse_value(inc_value, vtype=''):
        '''determine value type passed'''
        true_bools = ['y', 'Y', 'yes', 'Yes', 'YES', 'true', 'True', 'TRUE',
                      'on', 'On', 'ON', ]
        false_bools = ['n', 'N', 'no', 'No', 'NO', 'false', 'False', 'FALSE',
                       'off', 'Off', 'OFF']

        # It came in as a string but you didn't specify value_type as string
        # we will convert to bool if it matches any of the above cases
        if isinstance(inc_value, str) and 'bool' in vtype:
            if inc_value not in true_bools and inc_value not in false_bools:
                raise YeditException('Not a boolean type. str=[%s] vtype=[%s]'
                                     % (inc_value, vtype))
        elif isinstance(inc_value, bool) and 'str' in vtype:
            inc_value = str(inc_value)

        # If vtype is not str then go ahead and attempt to yaml load it.
        if isinstance(inc_value, str) and 'str' not in vtype:
            try:
                inc_value = yaml.load(inc_value)
            except Exception:
                raise YeditException('Could not determine type of incoming ' +
                                     'value. value=[%s] vtype=[%s]'
                                     % (type(inc_value), vtype))

        return inc_value

    # pylint: disable=too-many-return-statements,too-many-branches
    @staticmethod
    def run_ansible(module):
        '''perform the idempotent crud operations'''
        yamlfile = Yedit(filename=module.params['src'],
                         backup=module.params['backup'],
                         separator=module.params['separator'])

        if module.params['src']:
            rval = yamlfile.load()

            if yamlfile.yaml_dict is None and \
               module.params['state'] != 'present':
                return {'failed': True,
                        'msg': 'Error opening file [%s].  Verify that the ' +
                               'file exists, that it is has correct' +
                               ' permissions, and is valid yaml.'}

        if module.params['state'] == 'list':
            if module.params['content']:
                content = Yedit.parse_value(module.params['content'],
                                            module.params['content_type'])
                yamlfile.yaml_dict = content

            if module.params['key']:
                rval = yamlfile.get(module.params['key']) or {}

            return {'changed': False, 'result': rval, 'state': "list"}

        elif module.params['state'] == 'absent':
            if module.params['content']:
                content = Yedit.parse_value(module.params['content'],
                                            module.params['content_type'])
                yamlfile.yaml_dict = content

            if module.params['update']:
                rval = yamlfile.pop(module.params['key'],
                                    module.params['value'])
            else:
                rval = yamlfile.delete(module.params['key'])

            if rval[0] and module.params['src']:
                yamlfile.write()

            return {'changed': rval[0], 'result': rval[1], 'state': "absent"}

        elif module.params['state'] == 'present':
            # check if content is different than what is in the file
            if module.params['content']:
                content = Yedit.parse_value(module.params['content'],
                                            module.params['content_type'])

                # We had no edits to make and the contents are the same
                if yamlfile.yaml_dict == content and \
                   module.params['value'] is None:
                    return {'changed': False,
                            'result': yamlfile.yaml_dict,
                            'state': "present"}

                yamlfile.yaml_dict = content

            # we were passed a value; parse it
            if module.params['value']:
                value = Yedit.parse_value(module.params['value'],
                                          module.params['value_type'])
                key = module.params['key']
                if module.params['update']:
                    # pylint: disable=line-too-long
                    curr_value = Yedit.get_curr_value(Yedit.parse_value(module.params['curr_value']),  # noqa: E501
                                                      module.params['curr_value_format'])  # noqa: E501

                    rval = yamlfile.update(key, value, module.params['index'], curr_value)  # noqa: E501

                elif module.params['append']:
                    rval = yamlfile.append(key, value)
                else:
                    rval = yamlfile.put(key, value)

                if rval[0] and module.params['src']:
                    yamlfile.write()

                return {'changed': rval[0],
                        'result': rval[1], 'state': "present"}

            # no edits to make
            if module.params['src']:
                # pylint: disable=redefined-variable-type
                rval = yamlfile.write()
                return {'changed': rval[0],
                        'result': rval[1],
                        'state': "present"}

        return {'failed': True, 'msg': 'Unkown state passed'}

# -*- -*- -*- End included fragment: ../../lib_utils/src/class/yedit.py -*- -*- -*-

# -*- -*- -*- Begin included fragment: lib/base.py -*- -*- -*-
# pylint: disable=too-many-lines
# noqa: E301,E302,E303,T001

class OpenShiftCLIError(Exception):
    '''Exception class for openshiftcli'''
    pass

ADDITIONAL_PATH_LOOKUPS = ['/usr/local/bin', os.path.expanduser('~/bin')]

def locate_oc_binary():
    ''' Find and return oc binary file '''
    # https://github.com/openshift/openshift-ansible/issues/3410
    # oc can be in /usr/local/bin in some cases, but that may not
    # be in $PATH due to ansible/sudo
    paths = os.environ.get("PATH", os.defpath).split(os.pathsep) + ADDITIONAL_PATH_LOOKUPS

    oc_binary = 'oc'

    # Use shutil.which if it is available, otherwise fallback to a naive path search
    try:
        which_result = shutil.which(oc_binary, path=os.pathsep.join(paths))
        if which_result is not None:
            oc_binary = which_result
    except AttributeError:
        for path in paths:
            if os.path.exists(os.path.join(path, oc_binary)):
                oc_binary = os.path.join(path, oc_binary)
                break

    return oc_binary

# pylint: disable=too-few-public-methods
class OpenShiftCLI(object):
    ''' Class to wrap the command line tools '''
    def __init__(self,
                 namespace,
                 kubeconfig='/etc/origin/master/admin.kubeconfig',
                 verbose=False,
                 all_namespaces=False):
        ''' Constructor for OpenshiftCLI '''
        self.namespace = namespace
        self.verbose = verbose
        self.kubeconfig = Utils.create_tmpfile_copy(kubeconfig)
        self.all_namespaces = all_namespaces
        self.oc_binary = locate_oc_binary()

    # Pylint allows only 5 arguments to be passed.
    # pylint: disable=too-many-arguments
    def _replace_content(self, resource, rname, content, force=False, sep='.'):
        ''' replace the current object with the content '''
        res = self._get(resource, rname)
        if not res['results']:
            return res

        fname = Utils.create_tmpfile(rname + '-')

        yed = Yedit(fname, res['results'][0], separator=sep)
        changes = []
        for key, value in content.items():
            changes.append(yed.put(key, value))

        if any([change[0] for change in changes]):
            yed.write()

            atexit.register(Utils.cleanup, [fname])

            return self._replace(fname, force)

        return {'returncode': 0, 'updated': False}

    def _replace(self, fname, force=False):
        '''replace the current object with oc replace'''
        cmd = ['replace', '-f', fname]
        if force:
            cmd.append('--force')
        return self.openshift_cmd(cmd)

    def _create_from_content(self, rname, content):
        '''create a temporary file and then call oc create on it'''
        fname = Utils.create_tmpfile(rname + '-')
        yed = Yedit(fname, content=content)
        yed.write()

        atexit.register(Utils.cleanup, [fname])

        return self._create(fname)

    def _create(self, fname):
        '''call oc create on a filename'''
        return self.openshift_cmd(['create', '-f', fname])

    def _delete(self, resource, rname, selector=None):
        '''call oc delete on a resource'''
        cmd = ['delete', resource, rname]
        if selector:
            cmd.append('--selector=%s' % selector)

        return self.openshift_cmd(cmd)

    def _process(self, template_name, create=False, params=None, template_data=None):  # noqa: E501
        '''process a template

           template_name: the name of the template to process
           create: whether to send to oc create after processing
           params: the parameters for the template
           template_data: the incoming template's data; instead of a file
        '''
        cmd = ['process']
        if template_data:
            cmd.extend(['-f', '-'])
        else:
            cmd.append(template_name)
        if params:
            param_str = ["%s=%s" % (key, value) for key, value in params.items()]
            cmd.append('-v')
            cmd.extend(param_str)

        results = self.openshift_cmd(cmd, output=True, input_data=template_data)

        if results['returncode'] != 0 or not create:
            return results

        fname = Utils.create_tmpfile(template_name + '-')
        yed = Yedit(fname, results['results'])
        yed.write()

        atexit.register(Utils.cleanup, [fname])

        return self.openshift_cmd(['create', '-f', fname])

    def _get(self, resource, rname=None, selector=None):
        '''return a resource by name '''
        cmd = ['get', resource]
        if selector:
            cmd.append('--selector=%s' % selector)
        elif rname:
            cmd.append(rname)

        cmd.extend(['-o', 'json'])

        rval = self.openshift_cmd(cmd, output=True)

        # Ensure results are retuned in an array
        if 'items' in rval:
            rval['results'] = rval['items']
        elif not isinstance(rval['results'], list):
            rval['results'] = [rval['results']]

        return rval

    def _schedulable(self, node=None, selector=None, schedulable=True):
        ''' perform oadm manage-node scheduable '''
        cmd = ['manage-node']
        if node:
            cmd.extend(node)
        else:
            cmd.append('--selector=%s' % selector)

        cmd.append('--schedulable=%s' % schedulable)

        return self.openshift_cmd(cmd, oadm=True, output=True, output_type='raw')  # noqa: E501

    def _list_pods(self, node=None, selector=None, pod_selector=None):
        ''' perform oadm list pods

            node: the node in which to list pods
            selector: the label selector filter if provided
            pod_selector: the pod selector filter if provided
        '''
        cmd = ['manage-node']
        if node:
            cmd.extend(node)
        else:
            cmd.append('--selector=%s' % selector)

        if pod_selector:
            cmd.append('--pod-selector=%s' % pod_selector)

        cmd.extend(['--list-pods', '-o', 'json'])

        return self.openshift_cmd(cmd, oadm=True, output=True, output_type='raw')

    # pylint: disable=too-many-arguments
    def _evacuate(self, node=None, selector=None, pod_selector=None, dry_run=False, grace_period=None, force=False):
        ''' perform oadm manage-node evacuate '''
        cmd = ['manage-node']
        if node:
            cmd.extend(node)
        else:
            cmd.append('--selector=%s' % selector)

        if dry_run:
            cmd.append('--dry-run')

        if pod_selector:
            cmd.append('--pod-selector=%s' % pod_selector)

        if grace_period:
            cmd.append('--grace-period=%s' % int(grace_period))

        if force:
            cmd.append('--force')

        cmd.append('--evacuate')

        return self.openshift_cmd(cmd, oadm=True, output=True, output_type='raw')

    def _version(self):
        ''' return the openshift version'''
        return self.openshift_cmd(['version'], output=True, output_type='raw')

    def _import_image(self, url=None, name=None, tag=None):
        ''' perform image import '''
        cmd = ['import-image']

        image = '{0}'.format(name)
        if tag:
            image += ':{0}'.format(tag)

        cmd.append(image)

        if url:
            cmd.append('--from={0}/{1}'.format(url, image))

        cmd.append('-n{0}'.format(self.namespace))

        cmd.append('--confirm')
        return self.openshift_cmd(cmd)

    def _run(self, cmds, input_data):
        ''' Actually executes the command. This makes mocking easier. '''
        curr_env = os.environ.copy()
        curr_env.update({'KUBECONFIG': self.kubeconfig})
        proc = subprocess.Popen(cmds,
                                stdin=subprocess.PIPE,
                                stdout=subprocess.PIPE,
                                stderr=subprocess.PIPE,
                                env=curr_env)

        stdout, stderr = proc.communicate(input_data)

        return proc.returncode, stdout.decode(), stderr.decode()

    # pylint: disable=too-many-arguments,too-many-branches
    def openshift_cmd(self, cmd, oadm=False, output=False, output_type='json', input_data=None):
        '''Base command for oc '''
        cmds = [self.oc_binary]

        if oadm:
            cmds.append('adm')

        cmds.extend(cmd)

        if self.all_namespaces:
            cmds.extend(['--all-namespaces'])
        elif self.namespace is not None and self.namespace.lower() not in ['none', 'emtpy']:  # E501
            cmds.extend(['-n', self.namespace])

        rval = {}
        results = ''
        err = None

        if self.verbose:
            print(' '.join(cmds))

        try:
            returncode, stdout, stderr = self._run(cmds, input_data)
        except OSError as ex:
            returncode, stdout, stderr = 1, '', 'Failed to execute {}: {}'.format(subprocess.list2cmdline(cmds), ex)

        rval = {"returncode": returncode,
                "results": results,
                "cmd": ' '.join(cmds)}

        if returncode == 0:
            if output:
                if output_type == 'json':
                    try:
                        rval['results'] = json.loads(stdout)
                    except ValueError as err:
                        if "No JSON object could be decoded" in err.args:
                            err = err.args
                elif output_type == 'raw':
                    rval['results'] = stdout

            if self.verbose:
                print("STDOUT: {0}".format(stdout))
                print("STDERR: {0}".format(stderr))

            if err:
                rval.update({"err": err,
                             "stderr": stderr,
                             "stdout": stdout,
                             "cmd": cmds})

        else:
            rval.update({"stderr": stderr,
                         "stdout": stdout,
                         "results": {}})

        return rval

class Utils(object):
    ''' utilities for openshiftcli modules '''

    @staticmethod
    def _write(filename, contents):
        ''' Actually write the file contents to disk. This helps with mocking. '''

        with open(filename, 'w') as sfd:
            sfd.write(contents)

    @staticmethod
    def create_tmp_file_from_contents(rname, data, ftype='yaml'):
        ''' create a file in tmp with name and contents'''

        tmp = Utils.create_tmpfile(prefix=rname)

        if ftype == 'yaml':
            # AUDIT:no-member makes sense here due to ruamel.YAML/PyYAML usage
            # pylint: disable=no-member
            if hasattr(yaml, 'RoundTripDumper'):
                Utils._write(tmp, yaml.dump(data, Dumper=yaml.RoundTripDumper))
            else:
                Utils._write(tmp, yaml.safe_dump(data, default_flow_style=False))

        elif ftype == 'json':
            Utils._write(tmp, json.dumps(data))
        else:
            Utils._write(tmp, data)

        # Register cleanup when module is done
        atexit.register(Utils.cleanup, [tmp])
        return tmp

    @staticmethod
    def create_tmpfile_copy(inc_file):
        '''create a temporary copy of a file'''
        tmpfile = Utils.create_tmpfile('lib_openshift-')
        Utils._write(tmpfile, open(inc_file).read())

        # Cleanup the tmpfile
        atexit.register(Utils.cleanup, [tmpfile])

        return tmpfile

    @staticmethod
    def create_tmpfile(prefix='tmp'):
        ''' Generates and returns a temporary file name '''

        with tempfile.NamedTemporaryFile(prefix=prefix, delete=False) as tmp:
            return tmp.name

    @staticmethod
    def create_tmp_files_from_contents(content, content_type=None):
        '''Turn an array of dict: filename, content into a files array'''
        if not isinstance(content, list):
            content = [content]
        files = []
        for item in content:
            path = Utils.create_tmp_file_from_contents(item['path'] + '-',
                                                       item['data'],
                                                       ftype=content_type)
            files.append({'name': os.path.basename(item['path']),
                          'path': path})
        return files

    @staticmethod
    def cleanup(files):
        '''Clean up on exit '''
        for sfile in files:
            if os.path.exists(sfile):
                if os.path.isdir(sfile):
                    shutil.rmtree(sfile)
                elif os.path.isfile(sfile):
                    os.remove(sfile)

    @staticmethod
    def exists(results, _name):
        ''' Check to see if the results include the name '''
        if not results:
            return False

        if Utils.find_result(results, _name):
            return True

        return False

    @staticmethod
    def find_result(results, _name):
        ''' Find the specified result by name'''
        rval = None
        for result in results:
            if 'metadata' in result and result['metadata']['name'] == _name:
                rval = result
                break

        return rval

    @staticmethod
    def get_resource_file(sfile, sfile_type='yaml'):
        ''' return the service file '''
        contents = None
        with open(sfile) as sfd:
            contents = sfd.read()

        if sfile_type == 'yaml':
            # AUDIT:no-member makes sense here due to ruamel.YAML/PyYAML usage
            # pylint: disable=no-member
            if hasattr(yaml, 'RoundTripLoader'):
                contents = yaml.load(contents, yaml.RoundTripLoader)
            else:
                contents = yaml.safe_load(contents)
        elif sfile_type == 'json':
            contents = json.loads(contents)

        return contents

    @staticmethod
    def filter_versions(stdout):
        ''' filter the oc version output '''

        version_dict = {}
        version_search = ['oc', 'openshift', 'kubernetes']

        for line in stdout.strip().split('\n'):
            for term in version_search:
                if not line:
                    continue
                if line.startswith(term):
                    version_dict[term] = line.split()[-1]

        # horrible hack to get openshift version in Openshift 3.2
        #  By default "oc version in 3.2 does not return an "openshift" version
        if "openshift" not in version_dict:
            version_dict["openshift"] = version_dict["oc"]

        return version_dict

    @staticmethod
    def add_custom_versions(versions):
        ''' create custom versions strings '''

        versions_dict = {}

        for tech, version in versions.items():
            # clean up "-" from version
            if "-" in version:
                version = version.split("-")[0]

            if version.startswith('v'):
                versions_dict[tech + '_numeric'] = version[1:].split('+')[0]
                # "v3.3.0.33" is what we have, we want "3.3"
                versions_dict[tech + '_short'] = version[1:4]

        return versions_dict

    @staticmethod
    def openshift_installed():
        ''' check if openshift is installed '''
        import yum

        yum_base = yum.YumBase()
        if yum_base.rpmdb.searchNevra(name='atomic-openshift'):
            return True

        return False

    # Disabling too-many-branches.  This is a yaml dictionary comparison function
    # pylint: disable=too-many-branches,too-many-return-statements,too-many-statements
    @staticmethod
    def check_def_equal(user_def, result_def, skip_keys=None, debug=False):
        ''' Given a user defined definition, compare it with the results given back by our query.  '''

        # Currently these values are autogenerated and we do not need to check them
        skip = ['metadata', 'status']
        if skip_keys:
            skip.extend(skip_keys)

        for key, value in result_def.items():
            if key in skip:
                continue

            # Both are lists
            if isinstance(value, list):
                if key not in user_def:
                    if debug:
                        print('User data does not have key [%s]' % key)
                        print('User data: %s' % user_def)
                    return False

                if not isinstance(user_def[key], list):
                    if debug:
                        print('user_def[key] is not a list key=[%s] user_def[key]=%s' % (key, user_def[key]))
                    return False

                if len(user_def[key]) != len(value):
                    if debug:
                        print("List lengths are not equal.")
                        print("key=[%s]: user_def[%s] != value[%s]" % (key, len(user_def[key]), len(value)))
                        print("user_def: %s" % user_def[key])
                        print("value: %s" % value)
                    return False

                for values in zip(user_def[key], value):
                    if isinstance(values[0], dict) and isinstance(values[1], dict):
                        if debug:
                            print('sending list - list')
                            print(type(values[0]))
                            print(type(values[1]))
                        result = Utils.check_def_equal(values[0], values[1], skip_keys=skip_keys, debug=debug)
                        if not result:
                            print('list compare returned false')
                            return False

                    elif value != user_def[key]:
                        if debug:
                            print('value should be identical')
                            print(user_def[key])
                            print(value)
                        return False

            # recurse on a dictionary
            elif isinstance(value, dict):
                if key not in user_def:
                    if debug:
                        print("user_def does not have key [%s]" % key)
                    return False
                if not isinstance(user_def[key], dict):
                    if debug:
                        print("dict returned false: not instance of dict")
                    return False

                # before passing ensure keys match
                api_values = set(value.keys()) - set(skip)
                user_values = set(user_def[key].keys()) - set(skip)
                if api_values != user_values:
                    if debug:
                        print("keys are not equal in dict")
                        print(user_values)
                        print(api_values)
                    return False

                result = Utils.check_def_equal(user_def[key], value, skip_keys=skip_keys, debug=debug)
                if not result:
                    if debug:
                        print("dict returned false")
                        print(result)
                    return False

            # Verify each key, value pair is the same
            else:
                if key not in user_def or value != user_def[key]:
                    if debug:
                        print("value not equal; user_def does not have key")
                        print(key)
                        print(value)
                        if key in user_def:
                            print(user_def[key])
                    return False

        if debug:
            print('returning true')
        return True

class OpenShiftCLIConfig(object):
    '''Generic Config'''
    def __init__(self, rname, namespace, kubeconfig, options):
        self.kubeconfig = kubeconfig
        self.name = rname
        self.namespace = namespace
        self._options = options

    @property
    def config_options(self):
        ''' return config options '''
        return self._options

    def to_option_list(self):
        '''return all options as a string'''
        return self.stringify()

    def stringify(self):
        ''' return the options hash as cli params in a string '''
        rval = []
        for key, data in self.config_options.items():
            if data['include'] \
               and (data['value'] or isinstance(data['value'], int)):
                rval.append('--%s=%s' % (key.replace('_', '-'), data['value']))

        return rval

# -*- -*- -*- End included fragment: lib/base.py -*- -*- -*-

# -*- -*- -*- Begin included fragment: class/oc_objectvalidator.py -*- -*- -*-

# pylint: disable=too-many-instance-attributes
class OCObjectValidator(OpenShiftCLI):
    ''' Class to wrap the oc command line tools '''

    def __init__(self, kubeconfig):
        ''' Constructor for OCObjectValidator '''
        # namespace has no meaning for object validation, hardcode to 'default'
        super(OCObjectValidator, self).__init__('default', kubeconfig)

    def get_invalid(self, kind, invalid_filter):
        ''' return invalid object information '''

        rval = self._get(kind)
        if rval['returncode'] != 0:
            return False, rval, []

        return True, rval, list(filter(invalid_filter, rval['results'][0]['items']))  # wrap filter with list for py3

    # pylint: disable=too-many-return-statements
    @staticmethod
    def run_ansible(params):
        ''' run the idempotent ansible code

            params comes from the ansible portion of this module
        '''

        objectvalidator = OCObjectValidator(params['kubeconfig'])
        all_invalid = {}
        failed = False

        def _is_invalid_namespace(namespace):
            # check if it uses a reserved name
            name = namespace['metadata']['name']
            if not any((name == 'kube',
                        name == 'openshift',
                        name.startswith('kube-'),
                        name.startswith('openshift-'),)):
                return False

            # determine if the namespace was created by a user
            if 'annotations' not in namespace['metadata']:
                return False
            return 'openshift.io/requester' in namespace['metadata']['annotations']

        checks = (
            (
                'hostsubnet',
                lambda x: x['metadata']['name'] != x['host'],
                u'hostsubnets where metadata.name != host',
            ),
            (
                'netnamespace',
                lambda x: x['metadata']['name'] != x['netname'],
                u'netnamespaces where metadata.name != netname',
            ),
            (
                'namespace',
                _is_invalid_namespace,
                u'namespaces that use reserved names and were not created by infrastructure components',
            ),
        )

        for resource, invalid_filter, invalid_msg in checks:
            success, rval, invalid = objectvalidator.get_invalid(resource, invalid_filter)
            if not success:
                return {'failed': True, 'msg': 'Failed to GET {}.'.format(resource), 'state': 'list', 'results': rval}
            if invalid:
                failed = True
                all_invalid[invalid_msg] = invalid

        if failed:
            return {
                'failed': True,
                'msg': (
                    "All objects are not valid.  If you are a supported customer please contact "
                    "Red Hat Support providing the complete output above. If you are not a customer "
                    "please contact users@lists.openshift.redhat.com for assistance."
                    ),
                'state': 'list',
                'results': all_invalid
                }

        return {'msg': 'All objects are valid.'}

# -*- -*- -*- End included fragment: class/oc_objectvalidator.py -*- -*- -*-

# -*- -*- -*- Begin included fragment: ansible/oc_objectvalidator.py -*- -*- -*-

def main():
    '''
    ansible oc module for validating OpenShift objects
    '''

    module = AnsibleModule(
        argument_spec=dict(
            kubeconfig=dict(default='/etc/origin/master/admin.kubeconfig', type='str'),
        ),
        supports_check_mode=False,
    )

    rval = OCObjectValidator.run_ansible(module.params)
    if 'failed' in rval:
        module.fail_json(**rval)

    module.exit_json(**rval)

if __name__ == '__main__':
    main()

# -*- -*- -*- End included fragment: ansible/oc_objectvalidator.py -*- -*- -*-


text:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _01.Array_Contains_Element
{
    class Program
    {
        static void Main(string[] args)
        {
            var numbers = Console.ReadLine().Split().Select(int.Parse).ToArray();
            var n = int.Parse(Console.ReadLine());
            bool check = false;
            for (int i = 0; i < numbers.Length; i++)
            {
                if (numbers[i] == n)
                    check = true;
            }
            if (check == true)
                Console.WriteLine("yes");
            else
                Console.WriteLine("no");
        }
    }
}

redpajama_set_name: RedPajamaGithub


text:
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you 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.cloud.network.dao;

import java.util.List;

import com.cloud.network.cisco.CiscoVnmcControllerVO;
import com.cloud.utils.db.GenericDao;

public interface CiscoVnmcDao extends GenericDao<CiscoVnmcControllerVO, Long> {
    /**
     * list all the Cisco VNMC devices added in to this physical network
     * @param physicalNetworkId physical Network Id
     * @return list of CiscoVnmcDeviceVO for this physical network.
     */
    List<CiscoVnmcControllerVO> listByPhysicalNetwork(long physicalNetworkId);

}


text:
g++ -O3 -fPIC -I ${JAVA_HOME}/include -I ${JAVA_HOME}/include/linux -shared -o libFrameJni.so cn_ac_ict_htc_utils_NativeUtils.cpp dataTransfer.cpp
cp libFrameJni.so ${HADOOP_HOME}/lib/native/
scp libFrameJni.so hadoop2:${HADOOP_HOME}/lib/native/


text:
module.exports = {
  'public': [
    // Anonymous user
    'account-login-form',
    'account-password-reset-request',
    'geometry-read',
    'map-browse',
  ],
  'frozen': [
    // The role is not able to login
    // possibly due to closed account, missing payments, or bad behavior.
  ],
  'reader': [ // able to see content after login but not modify
    'account-auth',
    'account-update',
    'attachments-read',
    'comments-read',
    'geometry-read',
    'latest-events',
    'latest-locations',
    'latest-posts',
    'locations-read',
    'locations-search',
    'locations-filter',
    'locations-export-one',
    'locations-geometry',
    'locations-places',
    'locations-statustype',
    'locations-thumbnail',
    'map-browse',
    'map-geolocation',
    'posts-read',
    'socket-events',
    'users-read',
  ],
  // 'commenter': [], // same as reader but could comment?
  'writer': [
    'account-auth',
    'account-update',
    'attachments-read',
    'attachments-create',
    'attachments-update-own',
    'attachments-delete-own',
    'comments-read',
    'comments-create',
    'comments-update-own',
    'comments-delete-own',
    'geometry-read',
    'latest-events',
    'latest-locations',
    'latest-posts',
    'locations-read',
    'locations-search',
    'locations-filter',
    'locations-create',
    'locations-delete-own',
    'locations-events',
    'locations-export-one',
    'locations-geometry',
    'locations-import',
    'locations-places',
    'locations-statustype',
    'locations-thumbnail',
    'locations-update-any',
    'map-browse',
    'map-geolocation',
    'posts-read',
    'posts-create',
    'posts-update-own',
    'posts-delete-own',
    'posts-move-own',
    'socket-events',
    'statistics-read',
    'users-read',
  ],
  'moderator': [
    'account-auth',
    'account-update',
    'admin-users-read',
    'admin-users-invite',
    'admin-users-rerole',
    'attachments-read',
    'attachments-create',
    'attachments-update-any',
    'attachments-delete-any',
    'comments-read',
    'comments-create',
    'comments-update-own',
    'comments-delete-any',
    'geometry-read',
    'latest-events',
    'latest-locations',
    'latest-posts',
    'locations-read',
    'locations-search',
    'locations-filter',
    'locations-create',
    'locations-delete-any',
    'locations-events',
    'locations-export-all',
    'locations-export-one',
    'locations-geometry',
    'locations-import',
    'locations-places',
    'locations-statustype',
    'locations-thumbnail',
    'locations-update-any',
    'map-browse',
    'map-geolocation',
    'posts-read',
    'posts-create',
    'posts-update-own',
    'posts-delete-any',
    'posts-move-any',
    'socket-events',
    'statistics-read',
    'users-read',
  ],
  'admin': [
    'account-auth', // allow login and any authentication with username
    'account-update', // change of own email and password
    'admin-users-read', // list users, their emails, and activity
    'admin-users-invite', // send invites to create new users
    'admin-users-invite-role', // send invite for non-default role
    'admin-users-rerole', // change user roles and freeze accounts
    'admin-users-delete', // delete user accounts permanently
    'attachments-read', // see post and comment attachments
    'attachments-create', // attach images and files to posts and comments
    'attachments-update-any', // rotate attachments created by anybody
    'attachments-update-own', // rotate attachments created by you
    'attachments-delete-any', // delete attachments created by anybody
    'attachments-delete-own', // delete attachments created by you
    'comments-read', // see comments with the posts
    'comments-create', // write comments to posts
    'comments-update-any', // edit comments by anybody
    'comments-update-own', // edit comments by you
    'comments-delete-any', // delete comments by anybody
    'comments-delete-own', // delete comments by you
    'geometry-read', // access coordinates tool
    'latest-events', // see latest events tab
    'latest-locations', // see latest locations tab
    'latest-posts', // see latest posts tab
    'locations-read', // browse locations on map and access location pages
    'locations-search', // search and list locations
    'locations-filter', // access tools to filter location markers on map
    'locations-create', // create new locations
    'locations-delete-any', // remove locations created by anyone
    'locations-delete-own', // remove locations created by you
    'locations-events', // see the event log on the location page
    'locations-export-all', // export all locations in a single KML file
    'locations-export-one', // export single location in KML or other formats.
    'locations-geometry', // see location coordinates on location page
    'locations-import', // create new locations by importing KML files
    'locations-places', // see automatic geocode on location page
    'locations-statustype', // see location status and type
    'locations-thumbnail', // see location thumbnail
    'locations-update-any', // edit name, type, coords, & thumb of any location
    'locations-update-own', // edit name, ... & thumbnail of your location
    'map-browse', // able to see the map without redirecting to login
    'map-geolocation', // button to see your location on map as a blue dot
    'posts-read', // see posts on location pages
    'posts-create', // write posts to locations
    'posts-update-any', // edit posts written by anybody
    'posts-update-own', // edit posts written by you
    'posts-delete-any', // delete posts written by anybody
    'posts-delete-own', // delete posts written by you
    'posts-move-any', // move posts by anybody onto another location
    'posts-move-own', // move posts by you onto another location
    'socket-events', // receive real-time web socket events to update content
    'statistics-read', // see site statistics such as the number of locations
    'users-read', // list users and see their profile pages
  ],
  // 'dev': [], // for testing and beta features?
};


text:
'use strict';

define(function() {

	/**
     * Abstract object. Provides core methods for all block types
     */
	function Block() {
		var self = this;

		self.hasNext = function(val){};
		self.getNext = function(){};
		self.peekNext = function(){};
		self.getPairAtLoc = function(loc){};
		self.getCurrLoc = function(){};
		self.getSize = function(){};
		self.resetBlock = function(){};

		self.isValueSorted = function(){ return true; };
		self.isPosSorted = function(){ return true; };
		self.isOneValue = function(){ return true; };
		self.isPosContiguous = function(){ return true; };
		self.isBlockValueSorted = function(){ return true; };
		self.isBlockPosSorted = function(){ return true; };
	}
	return Block;
});


text:
docker-puppetserver
===========

A simple puppetserver to get started

[![](https://images.microbadger.com/badges/image/cosmicq/docker-puppetserver.svg)](http://microbadger.com/images/cosmicq/docker-puppetserver "Get your own image badge on microbadger.com")

[![](https://images.microbadger.com/badges/version/cosmicq/docker-puppetserver.svg)](http://microbadger.com/images/cosmicq/docker-puppetserver "Get your own version badge on microbadger.com")

This is mostly taken from [puppet/puppetserver-standalone](https://hub.docker.com/r/puppet/puppetserver-standalone/).
I changed the base image from Ubuntu to Phusion and enabled ssh access.
I wanted to be able to connect to the puppetmaster and run
'''puppet module install''' commands.

### TL;DR ###

Make the persistent directories

    mkdir -p /srv/puppet/code
    mkdir /srv/puppet/puppet
    mkdir /srv/puppet/server

Here is a sample command using all the options.

    docker run -d --restart=always -p 8140:8140 \
    -v /srv/puppet/code:/etc/puppetlabs/code \
    -v /srv/puppet/puppet:/etc/puppetlabs/puppet \
    -v /srv/puppet/server:/opt/puppetlabs/server/data/puppetserver \
    -v /home/cosmicq/.ssh:/root/.ssh \
    --name puppet \
    --hostname puppetmaster.cosmicegg.net \
    cosmicq/docker-puppetserver

# SSH

Make sure you have run ssh-keygen and have an authorized_keys files in your home directory
    ssh-keygen
    (accept the defaults)

    cd ~/.ssh
    cat id_dsa.pub > authorized_keys

Ssh in and manage your server

    ssh root@172.16.0.2

# Puppet subdirectories

You might find it best to mount an NFS volume (or other shared storage) under /srv/puppet. This allows you to move your puppet container to other servers and persist data.

### /srv/puppet/code

Puppet is expecting to find the modules in:
    /srv/puppet/code/environments/production/manifests
                                            /modules

### /srv/puppet/puppet

Config files, hiera.yaml, and SSL certs.  You probably want to back this up.

### /srv/puppet/server

Peristant server data.  This is mounted so your puppet server can be rebooted and pick up where it left off.


text:
//
//  YPPlaceholderTextView.m
//  百思不得姐
//
//  Created by yupeng on 16/10/5.
//  Copyright © 2016年 yupeng. All rights reserved.
//

#import "YPPlaceholderTextView.h"

@implementation YPPlaceholderTextView

-(instancetype)initWithFrame:(CGRect)frame{

    if (self = [super initWithFrame:frame]) {

        //设置弹簧效果一直存在
        self.alwaysBounceVertical = YES;

        //默认字体
        self.font = [UIFont systemFontOfSize:15];

        //默认占位文字颜色
        self.placeholderColor = [UIColor lightGrayColor];

        //添加监听文字变化
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChanged) name:UITextViewTextDidChangeNotification object:nil];
    }

    return self;
}

-(void)textDidChanged{

    [self setNeedsDisplay];
}

/**
 * 将占位文字绘制上去
 */
- (void)drawRect:(CGRect)rect {

    //如果有文字,则占位文字不需要再绘制上去(setNeedDisplay方法在调用drawRect方法时,它会将之前绘制的内容自动清除掉)
    if (self.hasText) return;

    //调整Rect的frame
    rect.origin.x = 5;
    rect.origin.y = 8;
    rect.size.width -= 2 * rect.origin.x ;

    //文字属性
    NSMutableDictionary * attars = [NSMutableDictionary dictionary];
    attars[NSForegroundColorAttributeName] = self.placeholderColor;
    attars[NSFontAttributeName] = self.font;

    //绘制文字
    [self.placeholder drawInRect:rect withAttributes:attars];

}

-(void)dealloc{

    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

#pragma mark - 重写属性的setter方法,某些经常会修改的父类属性的setter方法也要重写

-(void)setPlaceholder:(NSString *)placeholder{

    _placeholder = placeholder;

    [self setNeedsDisplay];

}

-(void)setPlaceholderColor:(UIColor *)placeholderColor{

    _placeholderColor = placeholderColor;

    [self setNeedsDisplay];
}

-(void)setFont:(UIFont *)font
{
    [super setFont:font];

    [self setNeedsDisplay];
}

-(void)setText:(NSString *)text{

    [super setText:text];

    [self setNeedsDisplay];

}

-(void)setAttributedText:(NSAttributedString *)attributedText{

    [super setAttributedText:attributedText];

    [self setNeedsDisplay];
}

@end


text:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="10dp"
    android:gravity="center"
    android:visibility="visible"
    android:background="@color/white">

    <!-- WRAP CONTENT -->

    <!-- LOADING -->

    <LinearLayout
        android:id="@+id/llContainerAll"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_gravity="left|top"
        android:visibility="visible"
        android:background="@color/white">

        <ImageView
            android:layout_width="177dp"
            android:layout_height="145dp"
            android:id="@+id/imageView"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="50dp"
            android:visibility="visible"
            android:src="@drawable/simple" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Login..."
            android:id="@+id/login"
            android:layout_gravity="center_horizontal"
            android:visibility="visible" />

        <!-- PROFILE -->
        <include layout="@layout/include_main_profile" />

        <ProgressBar
            android:id="@+id/pbContainer"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_gravity="center"
            android:visibility="visible"
            android:layout_marginTop="60dp"
            android:indeterminate="false" />

    </LinearLayout>

</FrameLayout>


text:
package MediaAudio_Vedio;

public interface MediaController {
	// play media
	void play();

	// stop media
	void stop();
	// interrupt media
	void pause();
}


text:
$(function(){
    // 角色页面
    // role add
    $("#role-name-add").change(function(){
        if($(this).val()==""){
            $(this).removeClass("is-valid").addClass("is-invalid").siblings(".invalid-feedback").text("请输入角色名")
            return false
        }else{
            $(this).removeClass("is-invalid").addClass("is-valid").siblings(".invalid-feedback").text("")
        }
    })

    $("#role-add").on("click", function(){
        if($("#role-name-add").val()==""){
            $("#role-name-add").removeClass("is-valid").addClass("is-invalid").siblings(".invalid-feedback").text("请输入角色名")
            return false
        }else{
            $("#role-name-add").removeClass("is-invalid").addClass("is-valid").siblings(".invalid-feedback").text("")
        }
        $.ajax({
            type: "POST",
            url: $(this).data("url"),
            data: {
                "role-name" : $('#role-name-add').val()
            },
            success: data => {
                if(data.success){
                    $("#addRoleModal").modal("hide")
                    $("body").append(`

                        添加成功!
                        <button type="button" class="close" data-dismiss="alert" aria-label="Close" onclick="window.location.reload()"
                        ×
                        </button>

                    `)
                    setTimeout(() => {
                        window.location.reload()
                    }, 1000);
                }else{
                    $("body").append(`

                        服务器错误!请联系管理员
                        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                        ×
                        </button>

                  `);
                }
            },
            error: ()=>{
                $("body").append(`

                        服务器错误!请联系管理员
                        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                        ×
                        </button>

                  `);
            }
        })
    })

    // role edit
    $("#editRoleModal").on('show.bs.modal', function(event){
        $(this).find('#role-name-edit').val($(event.relatedTarget).data('name'))
        $(this).find('#role-id').text($(event.relatedTarget).data('id'))
    })

    $("#role-name-edit").change(function(){
        if($(this).val()==""){
            $(this).removeClass("is-valid").addClass("is-invalid").siblings(".invalid-feedback").text("请输入角色名")
            return false
        }else{
            $(this).removeClass("is-invalid").addClass("is-valid").siblings(".invalid-feedback").text("")
        }
    })

    $("#role-edit").on("click", function(){
        if($("#role-name-edit").val()==""){
            $("#role-name-edit").removeClass("is-valid").addClass("is-invalid").siblings(".invalid-feedback").text("请输入角色名")
            return false
        }else{
            $("#role-name-edit").removeClass("is-invalid").addClass("is-valid").siblings(".invalid-feedback").text("")
        }
        $.ajax({
            type: "PUT",
            url: $(this).data("url"),
            data: {
                "role-id" : $('#role-id').text(),
                "role-name" : $('#role-name-edit').val()
            },
            success: data => {
                if(data.success){
                    $("#editRoleModal").modal("hide")
                    $("body").append(`

                        修改成功!
                        <button type="button" class="close" data-dismiss="alert" aria-label="Close" onclick="window.location.reload()"
                        ×
                        </button>

                    `)
                    setTimeout(() => {
                        window.location.reload()
                    }, 1000);
                }else{
                    $("body").append(`

                        服务器错误!请联系管理员
                        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                        ×
                        </button>

                  `);
                }
            },
            error: ()=>{
                $("body").append(`

                        服务器错误!请联系管理员
                        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                        ×
                        </button>

                  `);
            }
        })
    })

    // delete role button
    $(".role-delete").click(function(){
        if(!confirm('你确定要删除此账号吗')){
            return false
        }
        $.ajax({
            method: "DELETE",
            url: $(this).data('url'),
            data: {
                "role-id" : $(this).data('id')
            },
            success: data => {
                if(data.success){
                    $("body").append(`

                        删除成功!
                        <button type="button" class="close" data-dismiss="alert" aria-label="Close" onclick="window.location.reload()"
                        ×
                        </button>

                    `)
                    setTimeout(() => {
                        window.location.reload()
                    }, 1000);
                }else{
                    $("body").append(`

                        服务器错误!请联系管理员
                        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                        ×
                        </button>

                  `);
                }
            },
            error: ()=>{
                $("body").append(`

                        服务器错误!请联系管理员
                        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                        ×
                        </button>

                  `);
            }
        })
    })

    // role page access select
    $(".get-role-id").click(function(){
        $($('#access-select').children()).each(function(){
            $(this).attr('selected', false)
        })
        $.ajax({
            type: 'GET',
            url: $(this).data('url'),
            data: {
                "id" : $(this).data('id'),
            },
            success: data =>{
                // $('#role-select').children(":first").attr('selected', false)

                $($('#access-select').children()).each(function(){
                    data.forEach(element => {
                        if($(this).val()==element){
                            $(this).attr('selected', true)
                        }
                    });
                })
            },
            error: ()=>{

            }
        })
    })

    $("#editRoleAccessModal").on('show.bs.modal', function(event){
        $(this).find('#role-id-2').text($(event.relatedTarget).data('id'))
    })
    $("#role-access-edit").click(function(){
        $.ajax({
            type: "PATCH",
            url: $(this).data("url"),
            data: {
                "role-id" : $('#role-id-2').text(),
                "role-access" : $('#access-select').val(),
            },
            success: data => {
                if(data.success){
                    $("#editUserRoleModal").modal("hide")
                    $("body").append(`

                        修改成功!
                        <button type="button" class="close" data-dismiss="alert" aria-label="Close" onclick="window.location.reload()"
                        ×
                        </button>

                    `)
                    setTimeout(() => {
                        window.location.reload()
                    }, 1000);
                }else if(data.notify){
                    $(".toast").toast('show')
                }else{
                    $("body").append(`

                        服务器错误!请联系管理员
                        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                        ×
                        </button>

                  `);
                }
            },
            error: ()=>{
                $("body").append(`

                        服务器错误!请联系管理员
                        <button type="button" class="close" data-dismiss="alert" aria-label="Close">
                        ×
                        </button>

                `);
            }
        })
    })

})


text:
.swpmb-checkbox-wrapper .description {
	display: inline;
	font-style: normal;
}


text:
<?php

namespace Drupal\Tests\Component\Annotation;

use Drupal\Component\Annotation\Plugin;
use Drupal\Component\Annotation\Plugin\Discovery\AnnotatedClassDiscovery;
use Drupal\Component\FileCache\FileCacheFactory;
use PHPUnit\Framework\TestCase;

/**
 * @coversDefaultClass \Drupal\Component\Annotation\Plugin\Discovery\AnnotatedClassDiscovery
 * @group Annotation
 * @runTestsInSeparateProcesses
 */
class AnnotatedClassDiscoveryTest extends TestCase {

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    // Ensure the file cache is disabled.
    FileCacheFactory::setConfiguration([FileCacheFactory::DISABLE_CACHE => TRUE]);
    // Ensure that FileCacheFactory has a prefix.
    FileCacheFactory::setPrefix('prefix');
  }

  /**
   * @covers ::__construct
   * @covers ::getPluginNamespaces
   */
  public function testGetPluginNamespaces() {
    $discovery = new AnnotatedClassDiscovery(['com/example' => [__DIR__]]);

    $reflection = new \ReflectionMethod($discovery, 'getPluginNamespaces');
    $reflection->setAccessible(TRUE);

    $result = $reflection->invoke($discovery);
    $this->assertEquals(['com/example' => [__DIR__]], $result);
  }

  /**
   * @covers ::getDefinitions
   * @covers ::prepareAnnotationDefinition
   * @covers ::getAnnotationReader
   */
  public function testGetDefinitions() {
    $discovery = new AnnotatedClassDiscovery(['com\example' => [__DIR__ . '/Fixtures']]);
    $this->assertEquals([
      'discovery_test_1' => [
        'id' => 'discovery_test_1',
        'class' => 'com\example\PluginNamespace\DiscoveryTest1',
      ],
    ], $discovery->getDefinitions());

    $custom_annotation_discovery = new AnnotatedClassDiscovery(['com\example' => [__DIR__ . '/Fixtures']], CustomPlugin::class, ['Drupal\Tests\Component\Annotation']);
    $this->assertEquals([
      'discovery_test_1' => [
        'id' => 'discovery_test_1',
        'class' => 'com\example\PluginNamespace\DiscoveryTest1',
        'title' => 'Discovery test plugin',
      ],
    ], $custom_annotation_discovery->getDefinitions());

    $empty_discovery = new AnnotatedClassDiscovery(['com\example' => [__DIR__ . '/Fixtures']], CustomPlugin2::class, ['Drupal\Tests\Component\Annotation']);
    $this->assertEquals([], $empty_discovery->getDefinitions());
  }

}

/**
 * Custom plugin annotation.
 *
 * @Annotation
 */
class CustomPlugin extends Plugin {

  /**
   * The plugin ID.
   *
   * @var string
   */
  public $id;

  /**
   * The plugin title.
   *
   * @var string
   *
   * @ingroup plugin_translatable
   */
  public $title = '';

}

/**
 * Custom plugin annotation.
 *
 * @Annotation
 */
class CustomPlugin2 extends Plugin {}


text:
namespace principia {
namespace physics {
namespace internal_ephemeris {

using integrators::MockFixedStepSizeIntegrator;

template<typename Frame>
class MockEphemeris : public Ephemeris<Frame> {
 public:
  using typename Ephemeris<Frame>::AdaptiveStepParameters;
  using typename Ephemeris<Frame>::FixedStepParameters;
  using typename Ephemeris<Frame>::IntrinsicAcceleration;
  using typename Ephemeris<Frame>::IntrinsicAccelerations;
  using typename Ephemeris<Frame>::NewtonianMotionEquation;

  MockEphemeris()
      : Ephemeris<Frame>(
            MockFixedStepSizeIntegrator<NewtonianMotionEquation>::Get()) {}

  MOCK_METHOD(std::vector<not_null<MassiveBody const*>> const&,
              bodies,
              (),
              (const, override));
  MOCK_METHOD(not_null<ContinuousTrajectory<Frame> const*>,
              trajectory,
              (not_null<MassiveBody const*> body),
              (const, override));
  MOCK_METHOD(bool, empty, (), (const, override));
  MOCK_METHOD(Instant, t_min, (), (const, override));
  MOCK_METHOD(Instant, t_max, (), (const, override));
  MOCK_METHOD(FixedStepSizeIntegrator<NewtonianMotionEquation> const&,
              planetary_integrator,
              (),
              (const, override));

  MOCK_METHOD(absl::Status, Prolong, (Instant const& t), (override));
  MOCK_METHOD(
      not_null<std::unique_ptr<
          typename Integrator<NewtonianMotionEquation>::Instance>>,
      NewInstance,
      (std::vector<not_null<DiscreteTrajectory<Frame>*>> const& trajectories,
       IntrinsicAccelerations const& intrinsic_accelerations,
       FixedStepParameters const& parameters),
      (override));
  MOCK_METHOD(absl::Status,
              FlowWithAdaptiveStep,
              (not_null<DiscreteTrajectory<Frame>*> trajectory,
               IntrinsicAcceleration intrinsic_acceleration,
               Instant const& t,
               AdaptiveStepParameters const& parameters,
               std::int64_t max_ephemeris_steps),
              (override));
  MOCK_METHOD(
      absl::Status,
      FlowWithFixedStep,
      (Instant const& t,
       typename Integrator<NewtonianMotionEquation>::Instance& instance),
      (override));

  MOCK_METHOD((Vector<Acceleration, Frame>),
              ComputeGravitationalAccelerationOnMasslessBody,
              (Position<Frame> const& position, Instant const& t),
              (const, override));

  MOCK_METHOD((Vector<Acceleration, Frame>),
              ComputeGravitationalAccelerationOnMasslessBody,
              (not_null<DiscreteTrajectory<Frame>*> trajectory,
               Instant const& t),
              (const, override));

  MOCK_METHOD((Vector<Acceleration, Frame>),
              ComputeGravitationalAccelerationOnMassiveBody,
              (not_null<MassiveBody const*> body,
               Instant const& t),
              (const, override));

  MOCK_METHOD(int,
              serialization_index_for_body,
              (not_null<MassiveBody const*> body),
              (const, override));
  MOCK_METHOD(not_null<MassiveBody const*>,
              body_for_serialization_index,
              (int serialization_index),
              (const, override));

  MOCK_METHOD(void,
              WriteToMessage,
              (not_null<serialization::Ephemeris*> message),
              (const, override));

  MOCK_METHOD(Instant, t_min_locked, (), (const, override));
};

}  // namespace internal_ephemeris

using internal_ephemeris::MockEphemeris;

}  // namespace physics

ACTION_P(AppendToDiscreteTrajectories, degrees_of_freedom) {
  for (auto const& trajectory : arg0) {
    EXPECT_OK(trajectory->Append(arg2, degrees_of_freedom));
  }
}

ACTION_P2(AppendToDiscreteTrajectories, time, degrees_of_freedom) {
  for (auto const& trajectory : arg0) {
    EXPECT_OK(trajectory->Append(time, degrees_of_freedom));
  }
}

ACTION_P(AppendToDiscreteTrajectory, degrees_of_freedom) {
  EXPECT_OK(arg0->Append(arg2, degrees_of_freedom));
}

ACTION_P2(AppendToDiscreteTrajectory, time, degrees_of_freedom) {
  EXPECT_OK(arg0->Append(time, degrees_of_freedom));
}

ACTION_P3(AppendToDiscreteTrajectory, trajectory, time, degrees_of_freedom) {
  // The extra level of indirection is useful for tests that get a pointer to a
  // trajectory and squirrel it away using |SaveArg<N>|.
  EXPECT_OK((*trajectory)->Append(time, degrees_of_freedom));
}

ACTION_P(AppendPointsToDiscreteTrajectory, trajectory) {
  for (auto const& [time, degrees_of_freedom] : *trajectory) {
    EXPECT_OK(arg0->Append(time, degrees_of_freedom));
  }
}

}  // namespace principia


text:
import { baseComponent, baseComponentEventMap, baseComponentSettableProperties, JetElementCustomEvent, JetSetPropertyType } from '..';
export interface ojPopup extends baseComponent<ojPopupSettableProperties> {
    autoDismiss: 'none' | 'focusLoss';
    chrome: 'default' | 'none';
    initialFocus: 'auto' | 'none' | 'firstFocusable' | 'popup';
    modality: 'modeless' | 'modal';
    position: ojPopup.Position;
    tail: 'none' | 'simple';
    translations: {
        ariaCloseSkipLink?: string | undefined;
        ariaFocusSkipLink?: string | undefined;
        ariaLiveRegionInitialFocusFirstFocusable?: string | undefined;
        ariaLiveRegionInitialFocusFirstFocusableTouch?: string | undefined;
        ariaLiveRegionInitialFocusNone?: string | undefined;
        ariaLiveRegionInitialFocusNoneTouch?: string | undefined;
    };
    onAutoDismissChanged: ((event: JetElementCustomEvent<ojPopup["autoDismiss"]>) => any) | null;
    onChromeChanged: ((event: JetElementCustomEvent<ojPopup["chrome"]>) => any) | null;
    onInitialFocusChanged: ((event: JetElementCustomEvent<ojPopup["initialFocus"]>) => any) | null;
    onModalityChanged: ((event: JetElementCustomEvent<ojPopup["modality"]>) => any) | null;
    onPositionChanged: ((event: JetElementCustomEvent<ojPopup["position"]>) => any) | null;
    onTailChanged: ((event: JetElementCustomEvent<ojPopup["tail"]>) => any) | null;
    onOjAnimateEnd: ((event: ojPopup.ojAnimateEnd) => any) | null;
    onOjAnimateStart: ((event: ojPopup.ojAnimateStart) => any) | null;
    onOjBeforeClose: ((event: ojPopup.ojBeforeClose) => any) | null;
    onOjBeforeOpen: ((event: ojPopup.ojBeforeOpen) => any) | null;
    onOjClose: ((event: ojPopup.ojClose) => any) | null;
    onOjFocus: ((event: ojPopup.ojFocus) => any) | null;
    onOjOpen: ((event: ojPopup.ojOpen) => any) | null;
    addEventListener<T extends keyof ojPopupEventMap>(type: T, listener: (this: HTMLElement, ev: ojPopupEventMap[T]) => any, useCapture?: boolean): void;
    addEventListener(type: string, listener: EventListenerOrEventListenerObject, useCapture?: boolean): void;
    getProperty<T extends keyof ojPopupSettableProperties>(property: T): ojPopup[T];
    getProperty(property: string): any;
    setProperty<T extends keyof ojPopupSettableProperties>(property: T, value: ojPopupSettableProperties[T]): void;
    setProperty<T extends string>(property: T, value: JetSetPropertyType<T, ojPopupSettableProperties>): void;
    setProperties(properties: ojPopupSettablePropertiesLenient): void;
    close(): void;
    isOpen(): boolean;
    open(launcher: string | Element, position?: ojPopup.Position): void;
    refresh(): void;
}
export namespace ojPopup {
    interface ojAnimateEnd extends CustomEvent<{
        element: Element;
        action: 'open' | 'close';
        [propName: string]: any;
    }> {
    }
    interface ojAnimateStart extends CustomEvent<{
        action: 'open' | 'close';
        element: Element;
        endCallback: (() => void);
        [propName: string]: any;
    }> {
    }
    interface ojBeforeClose extends CustomEvent<{
        [propName: string]: any;
    }> {
    }
    interface ojBeforeOpen extends CustomEvent<{
        [propName: string]: any;
    }> {
    }
    interface ojClose extends CustomEvent<{
        [propName: string]: any;
    }> {
    }
    interface ojFocus extends CustomEvent<{
        [propName: string]: any;
    }> {
    }
    interface ojOpen extends CustomEvent<{
        [propName: string]: any;
    }> {
    }
    // tslint:disable-next-line interface-over-type-literal
    type Position = {
        my?: PositionAlign | undefined;
        at?: PositionAlign | undefined;
        offset?: PositionPoint | undefined;
        of?: string | PositionPoint | undefined;
        collision?: 'flip' | 'fit' | 'flipfit' | 'flipcenter' | 'none' | undefined;
    };
    // tslint:disable-next-line interface-over-type-literal
    type PositionAlign = {
        vertical?: 'top' | 'bottom' | 'center' | undefined;
        horizontal?: 'start' | 'end' | 'left' | 'center' | 'bottom' | undefined;
    };
    // tslint:disable-next-line interface-over-type-literal
    type PositionPoint = {
        x?: number | undefined;
        y?: number | undefined;
    };
}
export interface ojPopupEventMap extends baseComponentEventMap<ojPopupSettableProperties> {
    'ojAnimateEnd': ojPopup.ojAnimateEnd;
    'ojAnimateStart': ojPopup.ojAnimateStart;
    'ojBeforeClose': ojPopup.ojBeforeClose;
    'ojBeforeOpen': ojPopup.ojBeforeOpen;
    'ojClose': ojPopup.ojClose;
    'ojFocus': ojPopup.ojFocus;
    'ojOpen': ojPopup.ojOpen;
    'autoDismissChanged': JetElementCustomEvent<ojPopup["autoDismiss"]>;
    'chromeChanged': JetElementCustomEvent<ojPopup["chrome"]>;
    'initialFocusChanged': JetElementCustomEvent<ojPopup["initialFocus"]>;
    'modalityChanged': JetElementCustomEvent<ojPopup["modality"]>;
    'positionChanged': JetElementCustomEvent<ojPopup["position"]>;
    'tailChanged': JetElementCustomEvent<ojPopup["tail"]>;
}
export interface ojPopupSettableProperties extends baseComponentSettableProperties {
    autoDismiss: 'none' | 'focusLoss';
    chrome: 'default' | 'none';
    initialFocus: 'auto' | 'none' | 'firstFocusable' | 'popup';
    modality: 'modeless' | 'modal';
    position: ojPopup.Position;
    tail: 'none' | 'simple';
    translations: {
        ariaCloseSkipLink?: string | undefined;
        ariaFocusSkipLink?: string | undefined;
        ariaLiveRegionInitialFocusFirstFocusable?: string | undefined;
        ariaLiveRegionInitialFocusFirstFocusableTouch?: string | undefined;
        ariaLiveRegionInitialFocusNone?: string | undefined;
        ariaLiveRegionInitialFocusNoneTouch?: string | undefined;
    };
}
export interface ojPopupSettablePropertiesLenient extends Partial<ojPopupSettableProperties> {
    [key: string]: any;
}


text:
<?php

/**
 * Group join river view has been renamed
 */

$query = "UPDATE {$CONFIG->dbprefix}river SET view='river/relationship/member/create'
			WHERE view='river/group/create' AND action_type='join'";
update_data($query);


text:
extern EndlMarker endl;
extern DebugPrinter debug_printer;


text:
require 'helper'

class TestFindDocumentsClient < Test::Unit::TestCase
  context "when an edis client is asked to find documents it" do
    setup do
      @edis = EDIS::Client.new
    end

    should "return a nil documents list if document cannot be found" do
      result = @edis.find_documents({document_id: 000000})
      assert result.results.documents.nil?
    end

    should "return a array of documents" do
      result = @edis.find_documents
      assert result.results.documents
    end

    should "return a document when given a document id" do
      result = @edis.find_documents({document_id: 453695})
      assert result.results.documents
    end
  end
end


text:
package org.elasticsearch.test.store;

import org.apache.logging.log4j.Logger;
import javax.annotation.Nullable;
import org.elasticsearch.common.logging.Loggers;
import org.elasticsearch.common.settings.Setting;
import org.elasticsearch.common.settings.Setting.Property;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.index.IndexModule;
import org.elasticsearch.index.shard.IndexEventListener;
import org.elasticsearch.index.shard.IndexShard;
import org.elasticsearch.index.shard.IndexShardState;
import org.elasticsearch.index.shard.ShardId;
import org.elasticsearch.plugins.IndexStorePlugin;
import org.elasticsearch.plugins.Plugin;

import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;

public final class MockFSIndexStore {

    public static final Setting<Boolean> INDEX_CHECK_INDEX_ON_CLOSE_SETTING =
        Setting.boolSetting("index.store.mock.check_index_on_close", true, Property.IndexScope, Property.NodeScope);

    public static class TestPlugin extends Plugin implements IndexStorePlugin {
        @Override
        public Settings additionalSettings() {
            return Settings.builder().put(IndexModule.INDEX_STORE_TYPE_SETTING.getKey(), "mock").build();
        }

        @Override
        public List<Setting<?>> getSettings() {
            return Arrays.asList(INDEX_CHECK_INDEX_ON_CLOSE_SETTING,
            MockFSDirectoryFactory.CRASH_INDEX_SETTING,
            MockFSDirectoryFactory.RANDOM_IO_EXCEPTION_RATE_SETTING,
            MockFSDirectoryFactory.RANDOM_PREVENT_DOUBLE_WRITE_SETTING,
            MockFSDirectoryFactory.RANDOM_NO_DELETE_OPEN_FILE_SETTING,
            MockFSDirectoryFactory.RANDOM_IO_EXCEPTION_RATE_ON_OPEN_SETTING);
        }

        @Override
        public Map<String, DirectoryFactory> getDirectoryFactories() {
            return Collections.singletonMap("mock", new MockFSDirectoryFactory());
        }

        @Override
        public void onIndexModule(IndexModule indexModule) {
            Settings indexSettings = indexModule.getSettings();
            if ("mock".equals(indexSettings.get(IndexModule.INDEX_STORE_TYPE_SETTING.getKey()))) {
                if (INDEX_CHECK_INDEX_ON_CLOSE_SETTING.get(indexSettings)) {
                    indexModule.addIndexEventListener(new Listener());
                }
            }
        }
    }

    private static final EnumSet<IndexShardState> validCheckIndexStates = EnumSet.of(
            IndexShardState.STARTED, IndexShardState.POST_RECOVERY
    );
    private static final class Listener implements IndexEventListener {

        private final Map<IndexShard, Boolean> shardSet = Collections.synchronizedMap(new IdentityHashMap<>());
        @Override
        public void afterIndexShardClosed(ShardId shardId, @Nullable IndexShard indexShard, Settings indexSettings) {
            if (indexShard != null) {
                Boolean remove = shardSet.remove(indexShard);
                if (remove == Boolean.TRUE) {
                    Logger logger = Loggers.getLogger(getClass(), indexShard.shardId());
                    MockFSDirectoryFactory.checkIndex(logger, indexShard.store(), indexShard.shardId());
                }
            }
        }

        @Override
        public void indexShardStateChanged(IndexShard indexShard, @Nullable IndexShardState previousState,
                IndexShardState currentState, @Nullable String reason) {
            if (currentState == IndexShardState.CLOSED && validCheckIndexStates.contains(previousState)) {
               shardSet.put(indexShard, Boolean.TRUE);
            }

        }
    }

}


text:
.multilevelpushmenu_wrapper {
	position: absolute;
	overflow: hidden;
	min-width: 100%;
	min-height: 100%;
	margin: 0;
	padding: 0;
}

.multilevelpushmenu_wrapper .levelHolderClass {
	position: absolute;
	overflow: hidden;
	top: 0;
	background: #494949;
	width: auto;
	min-height: 100%;
	font-family: 'Segoe UI';
	font-size: 1em;
	zoom: 1;
}

.multilevelpushmenu_wrapper .ltr {
	margin-left: -100%;
	left: 0;
	-moz-box-shadow: 5px 0 5px -5px #222222;
	-webkit-box-shadow: 5px 0 5px -5px #222222;
	box-shadow: 5px 0 5px -5px #222222;
	filter: progid:DXImageTransform.Microsoft.Shadow(color=#1f4164,direction=90,strength=2);
}

.multilevelpushmenu_wrapper .rtl {
	margin-right: -100%;
	right: 0;
	-moz-box-shadow: 5px 0 5px 5px #222222;
	-webkit-box-shadow: 5px 0 5px 5px #222222;
	box-shadow: 5px 0 5px 5px #222222;
	filter: progid:DXImageTransform.Microsoft.Shadow(color=#1f4164,direction=270,strength=2);
}

.multilevelpushmenu_wrapper .multilevelpushmenu_inactive {
	background: #494949;
}

.multilevelpushmenu_wrapper h2 {
	font-size: 1.5em;
	line-height: 1em;
	font-weight: bold;
	color: #ffffff;
	padding: 0 .4em 0 .4em;
}

.multilevelpushmenu_wrapper ul {
	list-style: none;
	padding: 0;
	margin: 0;
}

.multilevelpushmenu_wrapper li {
	cursor: pointer;
	border-top: 1px solid #ffffff;
	padding: .4em .4em .4em .4em;
}

.multilevelpushmenu_wrapper li:last-child {
	border-bottom: 1px solid #ffffff;
}

.multilevelpushmenu_wrapper li:hover {
	background-color: #295685;
}

.multilevelpushmenu_wrapper a {
	display: block;
	outline: none;
	overflow: hidden;
	font-size: 1.5em;
	line-height: 1em;
	padding: .2em .2em;
	text-decoration: none;
	color: #fff;
}

.multilevelpushmenu_wrapper a:hover {
	color: #ffe;
}

.multilevelpushmenu_wrapper .backItemClass {
	display: block;
	padding: .4em .4em .4em .4em;
	background: #2e6196;
	border-top: 1px solid #ffffff;
}

.multilevelpushmenu_wrapper .floatRight {
	float: right;
}

.multilevelpushmenu_wrapper .floatLeft {
	float: left;
}

.multilevelpushmenu_wrapper .cursorPointer {
	cursor: pointer;
}

.multilevelpushmenu_wrapper .iconSpacing_ltr {
	padding: 0 .4em 0 0;
}

.multilevelpushmenu_wrapper .iconSpacing_rtl {
	padding: 0 0 0 .4em;
}


text:
package gov.nih.nci.cabig.caaers.tools;

import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;

import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;

import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.log4j.Logger;
import org.hibernate.SessionFactory;
import org.hibernate.jmx.StatisticsService;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

/**
 * Registers JMX beans used to monitor the application.
 *
 * @author dkrylov
 *
 */
public final class JMXBeansRegistrar implements InitializingBean,
		DisposableBean {

	private static final Logger log = Logger.getLogger(JMXBeansRegistrar.class);

	private List<SessionFactory> sessionFactories = new ArrayList<SessionFactory>();

	public void afterPropertiesSet() throws Exception {
		try {
			MBeanServer server = ManagementFactory.getPlatformMBeanServer();

			for (SessionFactory sf : sessionFactories) {
				ObjectName on = prepareObjectName(sf);
				StatisticsService stats = new StatisticsService();
				stats.setSessionFactory(sf);
				server.registerMBean(stats, on);
			}
		} catch (RuntimeException e) {
			log.error("Unable to register MBeans");
			log.error(ExceptionUtils.getFullStackTrace(e));
		}
	}

	/**
	 * @return
	 * @throws MalformedObjectNameException
	 * @throws NullPointerException
	 */
	private ObjectName prepareObjectName(SessionFactory sessionFactory)
			throws MalformedObjectNameException, NullPointerException {
		Hashtable tb = new Hashtable();
		tb.put("type", "statistics");
		tb.put("sessionFactory", "Session Factory #"
				+ sessionFactories.indexOf(sessionFactory));
		ObjectName on = new ObjectName("hibernate", tb); // MBean object
		// name
		return on;
	}

	public void destroy() throws Exception {
		try {
			MBeanServer server = ManagementFactory.getPlatformMBeanServer();
			for (SessionFactory sf : sessionFactories) {
				ObjectName on = prepareObjectName(sf);
				server.unregisterMBean(on);
			}
		} catch (Exception e) {
			log.error("Unable to unregister MBeans");
			log.error(ExceptionUtils.getFullStackTrace(e));
		}
	}

	public List<SessionFactory> getSessionFactories() {
		return sessionFactories;
	}

	public void setSessionFactories(List<SessionFactory> sessionFactories) {
		this.sessionFactories = sessionFactories;
	}
}


text:
@interface MIHECPemSanitizer__EntryType (Headers)
- (NSString *)beginHeaderOfType:(NSString *)type;
- (NSString *)endHeaderOfType:(NSString *)type;
@end
@implementation MIHECPemSanitizer__EntryType (Headers)

- (NSString *)headerWithLabel:(NSString *)label type:(NSString *)type {
    return [[[[@"-----" stringByAppendingString:label] stringByAppendingString:@" "] stringByAppendingString:type] stringByAppendingString:@"-----"];
}

- (NSString *)beginHeaderOfType:(NSString *)type {
    return [self headerWithLabel:@"BEGIN" type:type];
}

- (NSString *)endHeaderOfType:(NSString *)type {
    return [self headerWithLabel:@"END" type:type];
}

@end
@implementation MIHECPemSanitizer__EntryType
+ (NSString *)Certificate {
    return @"CERTIFICATE";
}
+ (NSString *)PrivateKey {
    return @"PRIVATE KEY";
}
+ (NSString *)PublicKey {
    return @"PUBLIC KEY";
}
@end

@interface MIHECPemSanitizer (Extraction)
- (NSRegularExpression *)pemEntryRegularExpression;
@end

@implementation MIHECPemSanitizer (Extraction)

- (NSRegularExpression *)pemEntryRegularExpression {
    __auto_type expression = [[NSRegularExpression alloc] initWithPattern:@"-----BEGIN(?<Begin>[\\w\\s]+)-----(?<Content>.+?)-----END(?<End>[\\w\\s]+)-----" options:NSRegularExpressionDotMatchesLineSeparators error:nil];
    return expression;
}

@end

#import "NSData+MIHConversion.h"
@implementation MIHECPemSanitizer

- (BOOL)isValidBase64String:(NSString *)string {
    return [[NSData alloc] initWithBase64EncodedString:string options:0] != nil;
}

- (BOOL)isValidPemString:(NSString *)string {
    __auto_type expression = [self pemEntryRegularExpression];
    __auto_type range = NSMakeRange(0, string.length);
    return [expression numberOfMatchesInString:string options:0 range:range] > 0;
}

- (NSString *)apply:(NSString *)string type:(NSString *)type {
    if ([self isValidPemString:string]) {
        return string;
    }

    // else we need to add pem headers?

    __auto_type entry = [MIHECPemSanitizer__EntryType new];
    __auto_type beginHeader = [entry beginHeaderOfType:type];
    __auto_type endHeader = [entry endHeaderOfType:type];

    BOOL canConvertToPem = string != nil && [self isValidBase64String:string];
    if (canConvertToPem) {
        __auto_type formattedString = [[[NSData alloc] initWithBase64EncodedString:string options:0] MIH_base64EncodedStringWithWrapWidth:64];
        __auto_type result = @[beginHeader, formattedString, endHeader];
        return [[result componentsJoinedByString:@"\n"] stringByAppendingString:@"\n"];
    }

    return nil;
}
- (NSString *)unapply:(NSString *)string {
    if ([self isValidPemString:string]) {
        __auto_type range = NSMakeRange(0, string.length);
        __auto_type match = [[self pemEntryRegularExpression] firstMatchInString:string options:0 range:range];

        if (match.numberOfRanges <= 2) {
            return nil;
        }
        __auto_type contentRange = [match rangeAtIndex:2];
        __auto_type content = [string substringWithRange:contentRange];
        __auto_type cleanContent = [[content componentsSeparatedByCharactersInSet:NSCharacterSet.newlineCharacterSet] componentsJoinedByString:@""];
        return cleanContent;
    }
    return string;
}
@end


text:
using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Hosting;

namespace OrchardCore.ContentPreview
{
    public class PreviewStartupFilter : IStartupFilter
    {
        public PreviewStartupFilter(IHostEnvironment hostEnvironment)
        {
        }

        public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
        {
            return app =>
            {
                app.Use(async (context, next) =>
                {
                    await next();

                    if (!context.Items.TryGetValue("PreviewPath", out var previewPathObject) || previewPathObject == null)
                    {
                        return;
                    }

                    var previewPath = previewPathObject.ToString();

                    if (!String.IsNullOrWhiteSpace(previewPath) && previewPath.StartsWith('/'))
                    {
                        var originalPath = context.Request.Path;
                        var originalQueryString = context.Request.QueryString;

                        context.Request.Path = previewPath;
                        context.Items.Remove("PreviewPath");

                        context.SetEndpoint(endpoint: null);
                        context.Request.RouteValues.Clear();

                        try
                        {
                            await next();
                        }
                        finally
                        {
                            context.Request.QueryString = originalQueryString;
                            context.Request.Path = originalPath;
                        }
                    }
                });

                next(app);
            };
        }
    }
}


text:
@**
* Yona, 21st Century Project Hosting SW
*
* Copyright Yona & Yobi Authors & NAVER Corp.
* https://yona.io
**@
@(currentUser:User)
@import utils.TemplateHelper._

@displayProjects(title:String, projects:List[Project], isActive:Boolean = false) = {
    @if(projects.isEmpty) {

@Messages("title.no.results")

    } else {

        @for(project <- projects){
            @myProjectList_partial(project, false)
        }

    }
}

                        <input class="search-input project-search" type="text" id="query" autocomplete="off" placeholder="@Messages("title.type.name")">

                                @Messages("title.recently.visited")

                                @Messages("title.createdByMe")

                                @Messages("title.watching")

                                @Messages("title.joinmember")

                        @views.html.index.displayProjectsWithFavored("recentlyVisited", currentUser.getVisitedProjects, currentUser.getFavoriteProjects, true)
                        @displayProjects("watching", currentUser.getWatchingProjects("name ASC"))
                        @displayProjects("createdByMe", Project.findProjectsCreatedByUser(currentUser.loginId, "createdDate desc"))
                        @displayProjects("joinmember", Project.findProjectsJustMemberAndNotOwner(currentUser, "name ASC"))